Posted on 2009-01-14 14:29
leekiang 閱讀(1585)
評論(0) 編輯 收藏 所屬分類:
java
Sun的JVM用下列方法可以產生Thread Dump堆棧信息:
1,Solaris OS
<ctrl>-’\’ (Control-Backslash)
?kill -QUIT <pid>
2, HP-UX/UNIX/Linux
Kill -3
PID?
PID通過下面方法獲取
ps -efHl | grep 'java' **. **
3,Windows
直接對MSDOS窗口的程序按Ctrl-break
有些Java應用服務器是在控制臺上運行,如Weblogic,為了方便獲取threaddump信息,在
weblogic啟動的時候,最好將其標準輸出重定向到一個文件,用"nohup sh startWebLogic.sh >
start.log &"命令,執行"kill -3 <pid>",Stack
trace就會輸出到start.log里。Tomcat的Thread Dump會輸出到命令行控制臺或者logs的catalina.out文件里。為了反映線程狀態的動態變化,需要接連多次做thread dump,每次間隔10-20s。
Sun JVM的常見線程狀態:
對于thread dump信息,主要關注的是線程的狀態和其執行堆棧
線程的狀態一般為三類
Runnable(R):當前可以運行的線程
Waiting on monitor(CW):線程主動wait
Waiting for monitor entry(MW):線程等鎖
一般關注的都是第一和第三種狀態的線程
Cpu很忙則關注runnable的線程
Cpu閑則關注waiting for monitor entry的線程
一種典型的死鎖是由于在server端應用(比如servlet)中請求由同一weblogic實例server的資源
解決辦法就是將該servlet放到另外的執行隊列里去執行
來源:http://www.searchfull.net/blog/2007/04/10/1176207938784.html
Thread Dump Analyzer 主頁:https://tda.dev.java.net/