如何让 Spring Boot 启动的更快?

网友投稿 856 2022-05-30

来源:http://rrd.me/ekc64

spring有多快?”

这是 2018 Spring One Platform 中的一场会议。看完会议视频,我自己动手试了一下。下面是我做出的测试结果。

还没有观看视频的朋友推荐看一下,非常有意思。

https://springoneplatform.io/2018/sessions/how-fast-is-spring-

本文使用的代码

https://github.com/bufferings/spring-boot-startup-mybench

我使用的是 OpenJDK 11。

可以按照下面这样运行基准测试。运行起来可能需要一些时间,下面会执行所有的测试。

1. FluxBaseline

我使用 SpringInitializr 创建项目,仅包含 Reactive Web。接下来,我会写一个 WebMVC 风格的极简controller。

Spring Boot 版本是 2.1.0.RELEASE。

启动结果 2.938 ± 0.287 s/op。

现在,以这个结果作为基线。让我们从这里开始。

2. WebMVC

我很好奇为什么要用 WebMVC 而不是 WebFlux?我尝试了一下。也许仅仅是为了比较 Tomcat 和 Netty?

WebFlux 快了一点,难道不是吗?

3. spring-context-indexer

接下来,我试了 spring-context-indexer,似乎创建了 component index。

嗯…慢了一点点?

我检查了 spring.components,发现只包含了一个组件。了解…我应该尝试更大一点的项目,这样才能看到效果。

4. 惰性初始化

尝试了惰性初始化。

查看结果,启动变快了一点。

5. NoVerify

运行加 -noverify 选项:

启动变得快了一点。不知道为什么有这个结果,稍后需要仔细了解一下。

6. TieredStopAtLevel

运行加 -XX:TieredStopAtLevel=1 选项:

嗯,快多了!减少了几乎2秒。还是不知道这个参数有什么含义,稍后需要仔细了解一下。

7. 指定 SpringConfigLocation 参数

如何让 Spring Boot 启动的更快?

运行加 -Dspring.config.location=classpath:/application.properties 选项:

嗯,又变慢了。

8. 关闭 JMX

运行加 -Dspring.jmx.enabled=false 选项:

变得快了一点。

9. 取消 Logback

从这里开始,我开始减少函数库。开始,取消 Logback:

结果如下:

嗯…似乎有一点点改进?

10. 取消 Jackson

接下来是 Jackson

结果如下:

结果变快了一点。

11. 取消 HibernateValidator

结果如下:

也有一点效果。

到这里为止,不再取消函数库了。

12. AppCDS

AppCDS (Application Class Data Sharing) 是 Oracle JDK 的一个企业版功能。OpenJDK 10 开始包含了这个功能。

看起来 AppCDS 转储信息存到了一个共享压缩文件,所以启动时间变短了。

嗯…并没有变快…然后我阅读了CDS的相关文章,找到原因了。

SpringBoot FatJAR 不在 CDS 管理范围内。

13. 使用 Thin Launcher 的 Flux

嗯,对不起,“Exploded” 基准测试错了。我曾经试着使用 FatJAR,但是 CDS 不能这么干。所以,我转而使用 Thin Launcher,所以 “Exploded” 就变成了 “Thin Launche”。

使用 CDS 以前,我会测试使用 Thin Launcher 打包 JAR 文件的启动速度。

尽管我使用 Thin Launcher 打包 app,但并没有使用 Thin Launcher 启动类,而是使用 Main class 让启动尽可能快一些。

嗯,快了一点,对吗?

14. Thin Launcher + CDS

现在,我要使用 AppCDS 。

喔!变得更快了!

15. 所有操作都上

最终,我把所有操作都用上。

小于1秒钟!(∩´∀`)∩耶

更进一步

在 Dave 的视频中,他提到了“函数式 Bean 定义”,尝试仅使用 Spring 不用 SpringBoot,app变得更快了。其中的道理还需要进一步了解。

结果:

真的很有意思。感谢!

本文转载自微信公众号【朱小厮的博客】

Spring Boot Spring

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:广东省高速集团携手华为建设“光”高速,推动ETC自由流收费全面实施
下一篇:同筑共联丨2018云智·金陵合作伙伴大会圆满落幕
相关文章