1. 程式人生 > >【小問題集02】-jdk問題定位工具箱-執行緒掛死、堆疊滿問題定位

【小問題集02】-jdk問題定位工具箱-執行緒掛死、堆疊滿問題定位

1-前言

開發過程中,偶爾會遇到一些執行緒池佔滿、cpu使用過高、堆疊滿了的問題,需要進一步分析執行緒具體位置,從而做進一步分析,現將linux和jdk自帶的一些執行緒除錯手段總結如下,供使用者盡一份分析。

更多內容:

2- 定位手段

2.1java visualVM圖形化工具

linux控制器後天敲入命令jvisualvm,可以開啟jdk自帶的圖形化除錯和分析工具,通過此工具,可以看到當前執行的所有jdk程式,並檢視到程式中執行緒、cpu佔用、記憶體使用統計。

在這裡插入圖片描述

2.2 jdk命令列定位cpu過高、記憶體過高執行緒

  1. 使用jps命令檢視目前正在執行的所有執行緒;
  2. 使用top命令檢視線層cpu、記憶體佔用情況;
  3. 找到指定執行緒號,將其轉換為十六進位制數字;
  4. 使用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

2.3 更多方式:待後續分析

https://www.cnblogs.com/duanxz/p/4515437.html