1. 程式人生 > >[轉]排查執行緒池使用情況,可定時任務統計.列印到指定日誌. 獲取系統擴容,執行緒池改造資訊.

[轉]排查執行緒池使用情況,可定時任務統計.列印到指定日誌. 獲取系統擴容,執行緒池改造資訊.

獲取系統擴容,執行緒池改造資訊.

1. 檢視程序id

jps
ps -ef | grep java
都可以檢視

2. 檢視程序裡具體哪個執行緒最屌絲

  man top -H檢視執行緒, -p 指定程序

top -H -p yourpid
例如,檢視如下,那麼13099最屌絲,並轉換為十六進位制(0x332b,注意小寫)
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                             

13098 admin     16   0 2543m 1.4g  21m S  0.0 72.8   0:03.35 java                                                                   
13099 admin     16   0 2543m 1.4g  21m S  0.0 72.8   1:54.93 java                                                                   
13100 admin     16   0 2543m 1.4g  21m S  0.0 72.8   0:00.06 java                                                                   


3.  stack檢視執行緒狀態

-l  long listing. Prints additional information about locks

jstack -l yourpid | less
jstack -l yourpid | grep 0x332b --color=always -A10 
其中,各欄位的含義,這裡有比較ok的介紹:http://www.blogjava.net/jzone/articles/303979.html

4. [備註]thread dump裡,有幾個ID比較迷惑人,這裡註解一下:
1) "tid" is the thread ID the thread have in the JVM (could be a memory address)

2) "nid" is the native thread id (in hex). On some Linux systems this ID maps directly to a process ID (number 13883 (in decimal) in your case).
3) 執行緒狀態的後面,有時候也會多跟一個id,那個是"資源"的id號,在等待對它的獲取等。

java 狀態 http://www.uml-diagrams.org/examples/java-6-thread-state-machine-diagram-example.html

Protocol state machine example - Thread States and Life Cycle in Java 6.