1: 首先把JDK Linux版本上传到服务器上.
2: 使用命令 jstack PID 命令打印出CPU占用过高进程的线程栈.
3: 使用top -H -p PID 命令查看对应进程是哪个线程占用CPU过高. 比如:
top - 17:23:50 up 12 days, 1:44, 8 users, load average: 4.85, 3.56, 3.76
Tasks: 556 total, 1 running, 555 sleeping, 0 stopped, 0 zombie
Cpu(s): 7.4%us, 4.4%sy, 0.4%ni, 71.6%id, 15.5%wa, 0.0%hi, 0.6%si, 0.0%st
Mem: 32072M total, 31972M used, 100M free, 265M buffers
Swap: 2047M total, 81M used, 1965M free, 23734M cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17363 webserve 20 0 4475m 2.9g 10m R 54 9.4 163:29.84 java
16452 webserve 20 0 4475m 2.9g 10m S 6 9.4 6:03.00 java
11283 webserve 20 0 4475m 2.9g 10m S 2 9.4 7:21.35 java
11284 webserve 20 0 4475m 2.9g 10m S 2 9.4 7:21.41 java
11285 webserve 20 0 4475m 2.9g 10m S 2 9.4 7:20.89 java
比如上面信息就可以看到 17363 线程CPU使用较高, 把这个值转换为 16 进制,
4、然后在jstack PID里打印的线程栈中进行搜索,17363转为十六进制的值43D3的线程代码, 就可以知道这个线程栈是做什么的了.