问题一:如何定位Java进程占用系统资源使用率高的问题
写一个死循环程序来模拟该类问题,代码如下:
使程序运行起来:
可以发现已经出现了问题,现在我们使用Linux命令来排查问题所在。
(1)使用jps命令查看进程号。
使用jps命令,发现执行程序进程PID为41194。
(2)查看指定PID41194的进程的资源使用情况。
top -p + PID命令,发现该进程占用CPU比率很高了。
(3)进一步查看该进程中各线程的资源使用情况
top -Hp + PID,发现PID为41204的线程CPU占比很高。
(4)输出线程的调用栈信息。
jstack + PID
注意这个“Thread-0”,调用栈信息提示了在程序代码第10行。这里的十六进制的nid换算成十进制就是41204,即上面线程的PID。
(5)在代码中查看,果然在第10行发现了问题所在,程序执行进入了死循环。
(6)在实际中应该对程序代码进行修改,这里只是为了定位问题所在,我使用了kill命令杀死了这个高比率占用CPU的进程。