Java程序中出现大量CPU消耗问题的排查
项目中可能会出现消耗大量 CPU 的情况(如下图),当我们发现这种情况应该怎么排查呢?
top
首先使用top
命令查看所有运行的进程占用资源的情况。可以看到上图中PID为14646的Java进程的CPU使用率达到了799.6%,这明显是有问题的。那我们应该怎么定位那一段代码出问题了呢?
jstack -p pid
使用 top
命令可以得到进程的PID,上述Java程序的PID是14646,我们运行JDK自带的命令jstack
命令 dump 正在运行的Java进程堆栈。(如下图)
我们根据top
命令看到的线程的id(十进制)转为 十六进制,然后在上图中找到对应的堆栈,然后根据堆栈找到代码中的行号。
这个简单的例子演示了jstack -p pid
的使用方法以及生产环境中排查死锁、死循环等问题。