1. 前言
记录最近收到线上服务cpu报警处理过程。
2. 定位
2.1 先恢复服务保留线程
保留1台机器,其他机器重启恢复服务
2.2 定位cpu使用率高的线程
通过top -Hp pid定位线程
2.3 定位代码
通过jstack导出线程快照,将高线程id转化为16进制查找(22699转58ab),发现是gc导致cpu爆满,估计可能是内存泄露问题
2.4 导出jvm内存信息
通过jmap导出jvm内存信息,重启机器先恢复服务
2.5 jvm内存分析
通过visualvm分析内存,定位到是一个线程sql查询大量数据占有大量内存导致一直fullgc
2.6 定位代码问题
通过排查代码和sql记录确定是由于PageHelper位置错误引起的。
3. 解决问题
通过修复代码上线修复问题
4. 总结
线上cpu问题一定要在尽快恢复服务的前提下保留一定信息便于排查问题