记一次线上CPU报警排查过程

1. 前言

记录最近收到线上服务cpu报警处理过程。

2. 定位

2.1 先恢复服务保留线程

保留1台机器,其他机器重启恢复服务

2.2 定位cpu使用率高的线程

通过top -Hp pid定位线程
记一次线上CPU报警排查过程_第1张图片

2.3 定位代码

通过jstack导出线程快照,将高线程id转化为16进制查找(22699转58ab),发现是gc导致cpu爆满,估计可能是内存泄露问题
记一次线上CPU报警排查过程_第2张图片

2.4 导出jvm内存信息

通过jmap导出jvm内存信息,重启机器先恢复服务

2.5 jvm内存分析

通过visualvm分析内存,定位到是一个线程sql查询大量数据占有大量内存导致一直fullgc

2.6 定位代码问题

通过排查代码和sql记录确定是由于PageHelper位置错误引起的。
记一次线上CPU报警排查过程_第3张图片
记一次线上CPU报警排查过程_第4张图片

3. 解决问题

通过修复代码上线修复问题

4. 总结

线上cpu问题一定要在尽快恢复服务的前提下保留一定信息便于排查问题

你可能感兴趣的:(java)