线上问题——CPU负载过高

使用 arthas 排查(推荐)

这个要先装下开源的 arthas,更大的好处是直接可以在线上调试,见我的文章 线上排查问题利器——arthas
最繁忙的top 线程,根据堆栈去分析代码

thread -n 3   当前最忙的前N个线程并打印堆栈

原生方法

  1. 先确定是不是java进程
  2. 看进程里使用最高的线程 top -H -p pid
  3. 记录线程pid, 把线程的pid转成十六进制:printf "%x\n" threadPid, 转后线程pid是 newThreadPid
  4. 打印线程的堆栈信息:jstack pid |grep newThreadPid -A 30
  5. 根据堆栈找cpu高的代码

常见原因

cpu load的飙升,一方面可能和full gc的次数增大有关,一方面可能和死循环有关系。
我遇到的是接收到的消息暴增导致cpu升高,解决办件是对消息处理进行限流。

你可能感兴趣的:(Interview,java监控和性能优化)