【每日鲜蘑】升级到Spring Boot 2.2.7是否带来了性能的提升

14,491 阅读2分钟

简单介绍

话说,在Spring Boot 2.2中,针对性能这一点,做了大幅的优化。应用程序的启动速度将变得更快,内存占用也会变得更少。那我用已经在线上运行的项目测试下,是不是真的吧。

项目简单描述下,原来的Spring Boot版本是2.1.3,计划升级到2.2.7,两者进行对比。当然,只是升级版本并换下端口号,其他不做变更。容器是Undertow

启动时间

2.1.3.RELEASE

Started SyncApplication in 11.747 seconds (JVM running for 12.292)

2.2.7.RELEASE

Started SyncApplication in 11.955 seconds (JVM running for 12.577)

总结

在不更改配置的情况下,启动时间没什么变化,比较三次启动记录的话,其实2.1.3.RELEASE更快一些。不过,Spring Boot 2.2为了加快应用的启动,还增加一个全局延迟初始化的配置参数spring.main.lazy-initialization,设置为true后启动时间如下:

Started SyncApplication in 13.123 seconds (JVM running for 13.783)

启动后最小内存【GC后】

2.1.3.RELEASE

已用: 47.7Mb
已提交: 1.1Gb
活动线程: 34
线程峰值: 37
已加载类: 15511

2.2.7.RELEASE

已用: 37.4Mb
已提交: 1.6Gb
活动线程: 33
线程峰值: 35
已加载类: 15519

总结

2.2.7.RELEASE初始内存占用还是比较小,只不过启动后扩张比较猛,线程数也少了不少。2.1.3.RELEASE申请内存是小梯度增长的。

简单测试

2.1.3.RELEASE

Running 20s test @ http://127.0.0.1:9801/sync/welcome
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    24.42ms   19.78ms 261.02ms   67.57%
    Req/Sec     1.09k   320.95     1.73k    68.72%
  Latency Distribution
     50%   11.95ms
     75%   44.17ms
     90%   46.44ms
     99%   86.46ms
  86984 requests in 20.05s, 13.27MB read
Requests/sec:   4337.66
Transfer/sec:    677.76KB

2.2.7.RELEASE

Running 20s test @ http://127.0.0.1:9802/sync/welcome
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    22.23ms   16.77ms 176.80ms   66.22%
    Req/Sec     1.20k   348.48     1.82k    66.71%
  Latency Distribution
     50%   13.22ms
     75%   36.49ms
     90%   44.61ms
     99%   72.03ms
  95815 requests in 20.05s, 14.62MB read
Requests/sec:   4778.59
Transfer/sec:    746.65KB

总结

2.2.7.RELEASE的QPS比 2.1.3.RELEASE高一丢丢,但在内存占用少并没有多少优势,而且在预热的时候,发现2.2.7.RELEASE会有CPU的飙升,后续测试又回归正常了。

归纳

Spring Boot的新版本还是不错的,在行业里,Spring的稳定性和可靠性是值得信赖的,希望越来越好。