1.背景
负载均衡两台机器一台cpu飙高,一台正常
2.问题排查
1.排除了代码问题
2.排除了上下游调用
3.排除了机器本身问题
4.查询到有10条gc线程分别占用了60%内存
3.问题定位
1.top查询到占用cpu高的进程号
2.top -Hp PID 查询改pid下占用高线程
3.jmap -histo:live PID |head -30 查看该进程堆的对象数量和大小
查询到占用cpu高的java进程堆中有自建的对象很多并且很大
jmap
由此想到,两台使用了分布式锁来处理一个任务;其中一台机器一直再跑,并且之前已经有一个故障导致该对象未被消费并且gc掉, 最终到了old区,反复gc.....结果,你懂的
解决办法: 重启大法,把堆内存清空, 然后优化代码😭
与君共勉....