1.找出java进程的pid
# ps aux|grep 'java'
得到结果 root 2206 15.2 68.0 796436 701232 ? Sl Jan07 473:02
得到pid 2206
2.查找占高CPU的线程
#top -H -p 2206
得到java的线程栈
如
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2208 root 20 0 777m 684m 7980 R 81.8 68.1 155:12.46 java
2251 root 20 0 777m 684m 7980 S 17.6 68.1 285:41.32 java
2214 root 20 0 777m 684m 7980 S 0.3 68.1 1:17.44 java
2206 root 20 0 777m 684m 7980 S 0.0 68.1 0:00.00 java
2207 root 20 0 777m 684m 7980 S 0.0 68.1 0:15.49 java
2209 root 20 0 777m 684m 7980 S 0.0 68.1 0:01.42 java
2210 root 20 0 777m 684m 7980 S 0.0 68.1 0:00.77 java
发现线程栈中pid 2208 占有CPU过高,继续查看此进程详情
3.将线程PID转化为16进制小写
#echo 'obase=16;2208'|bc
得到8A0 转化为0x8a0
4.查看此线程的堆栈信息
# jstack 2206|grep 0x8a0 -A 30
2206 是java的进程,0x8a0是要筛选的线程的pid
通过此线程的堆栈信息分析出问题原因。