【小問題集02】-jdk問題定位工具箱-執行緒掛死、堆疊滿問題定位
阿新 • • 發佈:2018-11-21
1-前言
開發過程中,偶爾會遇到一些執行緒池佔滿、cpu使用過高、堆疊滿了的問題,需要進一步分析執行緒具體位置,從而做進一步分析,現將linux和jdk自帶的一些執行緒除錯手段總結如下,供使用者盡一份分析。
更多內容:
2- 定位手段
2.1java visualVM圖形化工具
linux控制器後天敲入命令jvisualvm,可以開啟jdk自帶的圖形化除錯和分析工具,通過此工具,可以看到當前執行的所有jdk程式,並檢視到程式中執行緒、cpu佔用、記憶體使用統計。
2.2 jdk命令列定位cpu過高、記憶體過高執行緒
- 使用jps命令檢視目前正在執行的所有執行緒;
- 使用top命令檢視線層cpu、記憶體佔用情況;
- 找到指定執行緒號,將其轉換為十六進位制數字;
- 使用jstack命令並配合過濾條件找到指定執行緒堆疊列印。
####1-使用jps命令檢視目前正在執行的所有執行緒;
[email protected]:~/00-RUN/odl/karaf-0.8.3/bin$ jps
19872 Jps
3329 RemoteMavenServer
2933 Main
8629 Launcher
11101 Main
####2-使用top命令檢視線層cpu、記憶體佔用情況;
top -Hp 11101
---------------------------------------------------------------------
top - 13:52:16 up 1 day, 4:22, 1 user, load average: 0.46, 0.66, 0.56
Threads: 127 total, 0 running, 127 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.7 us, 1.4 sy, 0.0 ni, 94.8 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8051608 total, 403864 free, 5388188 used, 2259556 buff/cache
KiB Swap: 8269820 total, 8269820 free, 0 used. 1951408 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11218 fwd 20 0 6080792 1.241g 18272 S 3.3 16.2 8:40.63 java
11231 fwd 20 0 6080792 1.241g 18272 S 0.7 16.2 0:47.92 java
11101 fwd 20 0 6080792 1.241g 18272 S 0.0 16.2 0:00.00 java
11102 fwd 20 0 6080792 1.241g 18272 S 0.0 16.2 0:01.64 java ---------------------------------------------------------------------
####3-找到指定執行緒號,將其轉換為十六進位制數字;
[email protected]:~/00-RUN/odl/karaf-0.8.3/bin$ printf "%x\n" 11231
2bdf
####4-使用jstack命令並配合過濾條件找到指定執行緒堆疊列印。
[email protected]:~/00-RUN/odl/karaf-0.8.3/bin$ jstack -l 11101 | grep 2bdf
"opendaylight-cluster-data-scheduler-1" #120 prio=5 os_prio=0 tid=0x00007f1df4c7c000 nid=0x2bdf sleeping[0x00007f1de1f41000]
---------------------------------------------------
####替代方式:
##直接篩選檢視上下文詳情
jstack -l 11101 | grep -A 20 -B 20 2bdf
##衝定向到檔案搜尋掛關鍵詞檢視
jstack -l 11101 > log.log