1 个回答
定位过程:
CPU飙升问题定位的一般步骤是:
处理过程:
CPU飙升问题定位的一般步骤是:
首先通过top指令查看当前占用CPU较高的进程PID;
查看当前进程消耗资源的线程PID:top -Hp PID
通过print命令将线程PID转为16进制,根据该16进制值去打印的堆栈日志内查询,查看该线程所驻留的方法位置。
通过jstack命令,查看栈信息,定位到线程对应的具体代码。
分析代码解决问题。
处理过程:
如果是空循环,或者空自旋。
处理方式:可以使用Thread.sleep或者加锁,让线程适当的阻塞。
在循环的代码逻辑中,创建大量的新对象导致频繁GC。比如,从mysql查出了大量的数据,比如100W以上等等。
处理方式:可以减少对象的创建数量,或者,可以考虑使用 对象池。
其他的一些造成CPU飙升的场景,比如 selector空轮训导致CPU飙升 。
处理方式:参考Netty源码,无效的事件查询到了一定的次数,进行 selector 重建。
发布于:6个月前 (03-26) IP属地:未知
我来回答
您需要 登录 后回答此问题!