线上 CPU 爆满如何排查
线上 CPU 爆满如何排查
模拟代码
1 | public class ThreadDemo { |
排查
top 查看 cpu 的使用情况
发现 303 的 java 进程使用了 300+ 的 cpu
使用 top -H -p 303,查看子进程-线程的使用情况
发现第一个 pid 为 319 的线程消耗 cpu 比较多
使用 jstack 303 查看 java 线程堆栈信息,因为 jsatck 里面的线程 id 是 16进制的,所以吧 319 专程 16进制为 13f
可以发现就是 ThreadDemo 的代码消耗了 cpu,定位结束
其他扩展
- 如果追踪到是大量的 gc 线程,那可以通过 jmap 查看堆栈使用情况,jstat 查看 gc 统计,定位是否有大量的可疑对象。
- 还可以通过 增加启动参数 -XX:+HeapDumpOnOutOfMemoryError,打印程序内存溢出,然后导入到 mat 工具里面分析
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 zeofuns!