赞
踩
传统的破程序(百万行级一个微服务),在我的P15-gen2代电脑上启动一次需要80秒左右(直接运行三次,取平均值),在其它人电脑上可想而知了。
大概记录几点
1 优化肯定是需要找工具观察的,不观测还谈什么优化, 每个人可以找不同的工具,我就用用profile工具同样可以,
2 一些理论点
a 对Spring的启动过程,包括jvm的class的加载有一些了解
b 对一堆spring-**-starter的原理有一些了解,这个跟上面一点其实是有关联的
至少要真正分析过一个完整的源码,你就会明白为什么了。随意说一点,你翻翻,大多在加载类的时候是怎么找到自己要代理的类,比如feign.
c 对spring中的扩展点,特别是bean生命周期有一些了解。
d 对工具(不同的监测工具有不同的知识点)需要一点点了解,当然这个很简单
需要进行分析的几个点 1 执行次数特别多的需要考虑,比如说类加载次数
2 本方法比较耗时的
3 本方不耗时,但是其实已经是JDK中去了,相当于第2类。同样需要分析
3 动手吧
a 引入Indexder,加速扫描,因为代码是百万行级的,提高了几秒
b 从中间件/组件出发
OpenFeign发现扫描的类过多,精细到具体的包,提高了1-2秒
RocketMQ 发现非常无语的,为些我截图了,这玩意拼命调 NetworkInterface.getNetworkInterfaces ,这个可是耗时的
随意看两张图
就把MQ的优化一下
减少了几秒。
这个嘛,想了想,其实大多没有切入点修改(原因随意翻一下就知道,大多是工具类,没有啥好的扩展点),退而求其次的办法是做个java-agent,自动做cache.这个我就不细讲了,熟悉字节码的人玩起来很简单. 更进一步,这是为 了提高开发的效率,可以考虑在IDEA中做个插件,一键启用,开启自动cache.爽翻
c spring的扩展点来监测bean生命周期
这个其实比较简单,随意说一个,比如在在InitializingBean中做了太多耗时又同步的线程,启动不慢才怪。
这里要看情况,把比较耗时的改为异步,但是要注意不要影响程序的逻辑
d 去掉有人引起来又没真正使用的一些spring-**_starter,谁叫这是祖传十来年的代码呢
最后的效果,初步估计,能提高30%的速度,还有几个点没空改。改完了没有牛人们动不动提高80%,但是估计40%是有希望的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。