Spring cloud ,RestTemplate 接口调用耗时超长
一.项目背景
项目框架: spring boot: 1.5.12.RELEASE spring cloud: Edgware.SR3
项目遇到的问题:接口请求耗时较长,日志查看超过5000ms的请求,集中在 商品服务
grep -E --color "*RT:[5-9][0-9]{3,9}" zuul.2021-06-07.*
这耗时,绝了,我的服务间调用,超时时间也设置的有点长了。不然早该熔断了
二.项目排查
先说这次的问题 业务服务-> 调用商品服务,商品服务的处理耗时很短。那长耗时就是接口的等待
1.查看日志
timerCache is above the warning threshold of 1000 with size XXX
其实到这里,面向搜索编程一下,就已经有解决方案了
刚好今天有时间,就多看了一些
2.查看阿里云ECS CPU 负载
很明显是从5月30日开始出现问题的,找一下发版记录,最近的一次发版5月27日,就是这次发版引起的问题。 改动中跟restTemplate相关的是继承并重写了restTemplate
cpu升高,负载升高,任务等待,耗时增加
3.查看商品服务GC日志
GC (Allocation Failure) CMS-concurrent-sweep (concurrent mode failure)
结合2篇文章再分析一下
新生代GC,并没有分配出可用的空间,concurrent mode failure 老年代的垃圾收集器从CMS退化为Serial Old,所有应用线程被暂停,停顿时间变长
三.解决方案
按照上面restTemplate的方案,因为是一个维护的老项目,所以只需要不记录 restemplate请求的执行时间和结果的度量,不产生因为这个情况而产生的无法回收的对象
##关闭 spring: metrics: servo: enabled: false
四.总结
老的维护项目,从工作的角度讲,保持项目稳定最为重要,切勿炫技。总结经验,保证新项目的框架和业务代码的质量
五.PS
低版本:spring-cloud-netflix-core-1.4.4.RELEASE
高版本: spring-boot-actuator-2.1.14.RELEASE 详细对比可自行展开
上一篇:
IDEA上Java项目控制台中文乱码