如何快速定位JVM中消耗CPU最多的線程?

第一步、先找出Java的進程PIDjava

ps -ef | grep 進程名關鍵字
這裏假設找到的PID是:12345
 

第二步、找出該進程內最消耗CPU的線程編碼

top -Hp 12345

17183 log4x     20   0 4292820 529812  23040 R 94.7  0.8   1:11.79 java -server -Xms268435456 -Xmx268435456 
17162 log4x     20   0 4292820 529812  23040 R 87.1  0.8   1:17.90 java -server -Xms268435456 -Xmx268435456 
17172 log4x     20   0 4292820 529812  23040 R 86.1  0.8   1:16.26 java -server -Xms268435456 -Xmx268435456 
17176 log4x     20   0 4292820 529812  23040 R 68.0  0.8   1:12.31 java -server -Xms268435456 -Xmx268435456 
17170 log4x     20   0 4292820 529812  23040 S  7.3  0.8   0:44.70 java -server -Xms268435456 -Xmx268435456 

 

第三步、將線程編號轉換成十六進制spa

[root@test185 ~]# printf "%x\n" 17183
431f

 

第四步、用jstack PID打印出進程內全部的線程堆棧線程

jstack 12345 > 12345.txt

 

第五步、根據線程的十六進制編碼,在堆棧文件中定位具體的線程堆棧。code

nid=0x431f
相關文章
相關標籤/搜索