[英]How do you generate and analyze a thread dump from a running JBoss instance?
如何從正在運行的JBoss實例生成和分析線程轉儲?
有一個JBoss特定的方法更加用戶友好:
http://community.jboss.org/wiki/GenerateAThreadDumpWithTheJMXConsole
當您無法直接訪問主機(“kill”需要)時,這尤其有用。
http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/
...
“在UNIX平台上,您可以使用kill命令向程序發送信號。這是退出信號,由JVM處理。例如,在Solaris上,您可以使用命令kill -QUIT process_id,其中process_id是您的Java程序的進程號。
或者,您可以在啟動Java程序的窗口中輸入鍵序列<ctrl> \\。 發送此信號指示JVM中的信號處理程序,以遞歸方式打印出JVM內線程和監視器上的所有信息。“
...
“確定線程狀態
您將在JVM堆棧跟蹤的快照中看到許多不同狀態的許多不同線程。 使用的關鍵是:
R運行或可運行的線程
S暫停的線程
CW線程等待條件變量
MW線程在監視器鎖上等待
MS線程暫停等待監視器鎖“
Thread.getAllStackTraces()(自Java 1.5開始)
兩種選擇:
選項1 使用JMX控制台生成線程轉儲
為了生成線程轉儲:
http://localhost:8080
) jboss.system:type=ServerInfo
mbean( 提示:你可能只需要CTRL-F並在對話框中輸入type = ServerInfo) listThreadDump
所在的底部 筆記:
如果您使用的是Internet Explorer,則應使用“ File > Save As
來保存輸出,而不是將數據復制到文本編輯器。 出於某種原因,當您從Internet Explorer復制文本時,不會復制換行符,並且所有輸出都會在一行上結束。
選項2 使用Twiddle生成線程轉儲
或者,您可以使用旋轉來執行listThreadDump()
方法並將返回的HTML直接傳遞給文件。 使用此命令行:
<JBOSS_HOME>/bin/twiddle invoke "jboss.system:type=ServerInfo" listThreadDump > threads.html
此處找到的stacktrace應用程序也很有用,尤其是在未從命令行啟動Java應用程序的Windows機器上。
https://community.jboss.org/wiki/ThreadDumpJSP頁面具有獨立的自包含threaddump.war,可以在沒有JMX的情況下使用。
有時候JBoss會鎖定很多,甚至連jmx-concole都沒有響應。 在這種情況下,在Linux上使用kill -3,在Windows上使用SendSignal 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.