环境
一个服务用于推送客户的记录,客户反馈记录没有被推送到目标服务,通过管理发现所有的记录状态都为推送中。
现象
业务服务日志信息:
定位错误源码,发现是httpclient.isRunning()方法返回false。
通过start()方法定位到初始化的类,发现在处理异常的时候会抛出 I/O reactor terminated abnormally,然后把httpclient的Status设置成STOPPED,最终导致报错。
查询日志定位是否有这个错误信息,还真的找到了,打印上下文发现了FastJson抛出的OOM。
启动参数加上打印GC的参数,同时把原本的内存从512M调整到1024M,观察GC日志打印;发现metaspace用的默认,会频繁触发Full GC, 我认为需要调整大一些,改到了128M,后面在根据实际情况调整。
结论:还是重启比较简单见效快