Spring Boot重启后服务第一次访问时间慢的一次调优记录

5次阅读

共计 937 个字符,预计需要花费 3 分钟才能阅读完成。

背景
今天和分子公司合并服务接口(降低成本),对方反应我这边有个服务慢,搞了一天,就顺便记录下
服务调优
1. 网络
由于生产机和测试机在机房处于不同网段,网络环境质量有差异,最开始怀疑的是网络导致的。分别在几个环境中跑相同代码,发现是网络影响的调用三方服务返回时间波动。
2. 调优
基于业务需求,更改调用三方服务方法为异步调用。嗯!应该没问题了。
3. 验证
进行优化验证,发现调用平均时长有明显降低(废话)。但是,但可是,发现了新问题,在 spring boot 启动后第一次调用本服务,耗时仍旧远远高于后续调用,正常在 20ms/ 次,第一次平均在 600ms/ 次,于是开始 google
于是看到了这个提问 https://segmentfault.com/q/10…

修改项目
在查看 Dockerfile 后,发现启动脚本中有加如下参数
JAVA_ALL_OPTS=” -Djava.security.egd=file:/dev/./urandom ”
继而想修改 docker 基础镜像中 jre 的 java.security 文件遂在 Dockerfile 中增加如下 shell
sed -i “117csecurerandom.source=file:/dev/./urandom” /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security
就是用 shell 替换了文本的内容
结论
其实,也没有明显的效率提升,服务首次加载还是比之后慢。所以考虑,是不是文件是不是没有改全(待完成,还没验证)
最后,通过验证发现一个规律,假设有 A B 两个服务,在 Spring Boot 启动后,如果先首次访问 A,那么 B 的首次访问时间会缩短,但是还是会高于第二次及以后的访问时间如果先首次访问 B,那么 A 的首次访问时间会缩短,但是还是会高于第二次及以后的访问时间
因此,在 Spring boot 启动后,第一个被访问的服务耗时一定大于第二个被访问的服务,且每个服务之后的访问时间一定小于本服务第一次被访问的时间。
暂时就这么多,这是个记录。之后会对基础镜像中 jdk 里面的 java.security 进行修改,如果有效果 会再更新。

刚才又找了一下,发现 jdk 目录里没有 java.security,是我秀逗了

正文完
 0