乐趣区

关于java:记一次Spring项目启动耗时超级长的优化从7分钟优化到1分多钟

起因: 手上的一个 spring 我的项目启动耗时超级长,启动后查看破费的工夫,一共花了 426849 毫秒,换算近 7.11415 分钟。

1,察看日志初步排查问题,发现零碎卡在此处不动了。。。

2,持续期待日志,发现在启动过程中加载阿里数据库连接池 DruidDataSource 耗时近 4 分钟。

3,由此狐疑是连接池配置问题,去除所有初始化的参数,保留连贯信息 (driverClassName,url,username,password),启动耗时 39282 毫秒, 0.6547 分

4,持续排查连接池配置,放出几个初始化参数,再重新启动服务,发现耗时又呈现将近 7 分钟,由此可发现问题呈现在此。

5,查看 Druid 的官网文档,配置举荐 https://github.com/alibaba/dr…

查问官网文档:
initialSize     默认值是 0  初始化时建设物理连贯的个数,初始化产生在显示调用 init 办法,或者第一次 getConnection 时

初始化配置了 500 的个数,Spring 启动过程就须要破费大量的工夫去初始化创立连贯,导致系统启动超级的慢。

精确定位到初始化参数问题,导致我的项目启动耗时如此之短暂。

原先 <property name=”initialSize” value=”500″ />
批改后 <property name=”initialSize” value=”50″ />

此次优化成果如下:
系统启动性能优化(前后耗时比照):
优化前:spring 我的项目启动耗时 426849 毫秒,大概 7 分钟。
优化后:spring 我的项目启动耗时 185613 毫秒,大概 3 分钟,启动性能晋升 2 倍多。
极致状况下,开发人员本地启动服务,可间接删掉 initialSize 参数配置,启动性能还可在原根底上晋升 20 秒左右。
启动这个我的项目,一次可提速近 3 分钟。

将近 3 分钟的启动时长,对于我的项目来说还是太长了,持续深度优化。

6,监控日志发现加载线程池呈现耗时将近(从 18s 到 27s)10 秒

2022-03-01 16:47:18 [RMI TCP Connection(5)-127.0.0.1] INFO  bs2.xxxxxxxxx.orm.core.SQLExecutor  – 2441 query select  from xxxxxxx  
2022-03-01 16:47:27 [RMI TCP Connection(5)-127.0.0.1] INFO  org.springframework.xxxxx.concurrent.ThreadPoolTaskExecutor  – Initializing ‘txxxxkxecutor’

定位到零碎应用 xml 配置线程池,在初始化的时候间接加载,导致耗时减少,于是批改加载为 lazy-init

7,持续监控日志,在 webApplication 初始化时停留了一分多钟。
16:33:40.811 [NettyClientSelector_1] DEBUG i.n.u.i.JavassistTypeParameterMatcherGenerator – Generated: io.netty.util.internal.__matchers__.com.alibaba.xxxxxmq.remoting.protocol.RemotingCommandMatcher
2022-03-01 16:34:48 [RMI TCP Connection(3)-127.0.0.1] INFO  org.springframework.web.context.ContextLoader  – Root WebApplicationContext: initialization completed in 104988 ms
2022-03-01 16:34:52 [RMI TCP Connection(3)-127.0.0.1] INFO  rsLog  – com.baison.bap.resource.StringResourceLoader starting load

8,定位到是因为 spring 的 bean 加载,启动过程中加载了大量的 bean 类,于是在 bean.xml 文件中,进行懒加载配置。

优化后,耗时曾经到 1 分多钟了,这下启动起来霎时就爽了。

此次优化成果如下:
系统启动性能优化(前后耗时比照):
优化前:spring 我的项目启动耗时 426849 毫秒,大概 7 分钟。
优化后:spring 我的项目启动耗时 99505 毫秒,大概 1 分半,启动性能晋升将近 5 倍。
启动这个我的项目,一次可提速近 5 分钟,均匀下来用在这些我的项目启动的工夫下面,每天能够节俭几十分钟。

退出移动版