排查Java程序CPU占用过高的线程

收到服务器报警,服务端的一个java服务占用cpu200%多。该服务里面跑了很多线程,于是想找到是谁引起的。

1、首先dump出该进程的所有线程及状态

使用命令 jstack PID 命令打印出CPU占用过高进程的线程栈.

jstack -l5683>5683.stack

将进程id为5683的线程栈输出到了文件


2、使用top命令找到耗cpu的线程

使用top -H -p PID 命令查看对应进程是哪个线程占用CPU过高.

可以看到是  5726 ~ 5729这4个线程占用的cpu比较高


3. 将线程的pid 转成16进制,比如5729 = 0x1661

到第一步dump出来的 5683.stack 里面找0x1661 就知道是哪个线程了

经过查找,是服务线程比较忙,初步解决方法就是加大服务线程数。

你可能感兴趣的:(排查Java程序CPU占用过高的线程)