今天和分子公司合并服务接口(降低成本),对方反应我这边有个服务慢,搞了一天,就顺便记录下
由于生产机和测试机在机房处于不同网段,网络环境质量有差异,最开始怀疑的是网络导致的。分别在几个环境中跑相同代码,发现是网络影响的调用三方服务返回时间波动。
基于业务需求,更改调用三方服务方法为异步调用。嗯!应该没问题了。
进行优化验证,发现调用平均时长有明显降低(废话)。但是,但可是,发现了新问题,在 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,是我秀逗了