簡體   English   中英

如何從正在運行的JBoss實例生成和分析線程轉儲?

[英]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控制台生成線程轉儲

為了生成線程轉儲:

  1. 打開JMXConsole(例如: http://localhost:8080
  2. 導航到jboss.system:type=ServerInfo mbean( 提示:你可能只需要CTRL-F並在對話框中輸入type = ServerInfo)
  3. 單擊Server Info mbean的鏈接。
  4. 導航到listThreadDump所在的底部
  5. 單擊它並獲取您的線程轉儲

筆記:

如果您使用的是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM