java 服务器 cpu负载过高原因汇总

cpu消耗过高的常见原因如下:
1.编码逻辑问题,导致死循环
2.程序在运行过程中产生大量生命周期长/无法回收的对象,导致GC线程就不断GC,占用CPU
3.使用非线程安全类 例如 HashMap rehash会出现死循环

cpu消耗过高排查过程:
1.找出机器上高负载的进程,可使用top
2.定位问题线程,查看问题进程执行情况,可用ps -mp pid -o THREAD,tid,time
3.将进程id转换为16进制,可用printf ‘%x\n’ pid,因为java堆栈中的进程号是16进制,转化后便于查找
4.使用jstack打印堆栈信息,从中找出对应进程,进而找到对应的执行类
5.审核执行类代码

本文参考以下文献:
https://blog.csdn.net/GX_1_11_real/article/details/80242858
https://www.jianshu.com/p/6d573e42310a 这篇文章有通过进程的运行状态进行分析
https://juejin.im/post/5a66a08d5188253dc3321da0 hashMap 多线程调用产生死循环分析

你可能感兴趣的:(工程问题排查)