话说,在Spring Boot 2.2中,针对性能这一点,做了大幅的优化。应用程序的启动速度将变得更快,内存占用也会变得更少。那我用已经在线上运行的项目测试下,是不是真的吧。
项目简单描述下,原来的Spring Boot版本是2.1.3,计划升级到2.2.7,两者进行对比。当然,只是升级版本并换下端口号,其他不做变更。容器是 Undertow
。
Started SyncApplication in 11.747 seconds (JVM running for 12.292)
复制代码
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)
复制代码
已用: 47.7Mb
已提交: 1.1Gb
活动线程: 34
线程峰值: 37
已加载类: 15511
复制代码
已用: 37.4Mb
已提交: 1.6Gb
活动线程: 33
线程峰值: 35
已加载类: 15519
复制代码
2.2.7.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
复制代码
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
的稳定性和可靠性是值得信赖的,希望越来越好。
本文使用 mdnice 排版