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

背景

今天和分子公司合并服务接口(下降成本),对方反应我这边有个服务慢,搞了一天,就顺便记录下

服务调优

1. 网络

因为生产机和测试机在机房处于不一样网段,网络环境质量有差别,最开始怀疑的是网络致使的。分别在几个环境中跑相同代码,发现是网络影响的调用三方服务返回时间波动。java

2.调优

基于业务需求,更改调用三方服务方法为异步调用。嗯!应该没问题了。spring

3.验证

进行优化验证,发现调用平均时长有明显下降(废话)。可是,但但是,发现了新问题,在spring boot启动后第一次调用本服务,耗时仍旧远远高于后续调用,正常在20ms/次,第一次平均在600ms/次,因而开始googledocker

因而看到了这个提问
https://segmentfault.com/q/10...

修改项目

在查看Dockerfile后,发现启动脚本中有加以下参数shell

JAVA_ALL_OPTS=" -Djava.security.egd=file:/dev/./urandom "

继而想修改docker基础镜像中jre的java.security文件
遂在Dockerfile中增长以下shellsegmentfault

sed -i "117csecurerandom.source=file:/dev/./urandom" /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security

就是用shell 替换了文本的内容网络

结论

其实,也没有明显的效率提高,服务首次加载仍是比以后慢。因此考虑,是否是文件是否是没有改全(待完成,还没验证)dom

最后,经过验证发现一个规律,假设有A B两个服务,在Spring Boot 启动后,
若是先首次访问A,那么B的首次访问时间会缩短,可是仍是会高于第二次及之后的访问时间
若是先首次访问B,那么A的首次访问时间会缩短,可是仍是会高于第二次及之后的访问时间异步

所以,在Spring boot启动后,第一个被访问的服务耗时必定大于第二个被访问的服务,且每一个服务以后的访问时间必定小于本服务第一次被访问的时间。jvm

暂时就这么多,这是个记录。
以后会对基础镜像中jdk里面的java.security进行修改,若是有效果 会再更新。测试


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

相关文章
相关标签/搜索