top -c
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6965 root 20 0 57.3g 27g 1.0g S 303.5 58.4 3243:41 /usr/local/...
23853 root 20 0 1614m 1.1g 15m S 4.6 2.4 4363:17 java...
22384 guest 15 0 12740 1164 820 R 0.3 0.0 0:00.08 top -c
2 root RT -5 0 0 0 S 0.0 0.0 0:21.97 [migration/0]
PID:6965
(2) 找出佔用cpu最高的線程
top -Hp 6965 -d 1 -n 1
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16392 root 16 0 57.4g 27g 1.0g R 55.3 58.4 0:30.98 java
8757 root 25 0 57.4g 27g 1.0g R 53.6 58.4 103:54.27 java
top命令參數說明:
-p PID 僅監視指定進程的ID,PID是一個數值;
-c 顯示命令行,而不僅僅是命令名
-h 當系統由多個CPU時,個別CPU的狀態信息被隱藏,只顯示平均狀態值
-d N 顯示兩次刷新時間的間隔,比如 -d 5,表示兩次刷新間隔爲5秒;
(3) 打印佔CPU最高JAVA進程6965的堆棧信息
jstack 6965 > /root/mss/dump.txt
(4) 佔CPU最高線程16392換算成16進制到文檔中尋找對應線程4008
用命令
printf "%x\n" 16392
可查到對應的16進制線程id:4008
"Reference Handler" daemon prio=10 tid=0x27ed0400 nid=0x1f1c in Object.wait() [0
x281ff000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:503)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
- locked <0x0e6a5188> (a java.lang.ref.Reference$Lock)
參考文章:
http://lxiaodao.iteye.com/blog/1413774