记一次线上故障处理

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.....结果,你懂的

解决办法: 重启大法,把堆内存清空, 然后优化代码😭

与君共勉....

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容