现象
每次请求需要请求第三方接口查询数据来丰富,今天早上有用户在群里说数据错误。在日志里发现请求第三方服务接口返回超时导致丰富错误。搜了今天所有日志,发现出现55条一样的错误。查看第三方服务,确定服务没有error日志,同时也没查到请求数据的日志,就像没有收到请求一样。 请求错误日志如下:
分析原因
之前有专门研究过这个服务,该服务主要负责cmdb数据的同步和数据获取,定时任务很多,内存占用一直比较大,gc非常频繁,之前有把总的内存和新生代内存扩大过就没管过。 把gc日志下载放在gceasy分析,发现full gc还是非常频繁且耗时非常长,gc图:
怀疑fullgc的停顿时间过长,stw导致服务没有收到请求和响应。
处理
将所有的定时任务改到一个节点专门处理,并摘除这个节点接收请求。后续就没出现响应超时错误,看来是full gc影响。 任务迁移后,后续都没有发生full gc。