2009-06-25 51 views

回答

4

你可以使用JConsole的或jstack無論是在你的JDK的bin目錄。 jconsole特別允許你連接你的進程並監控線程,包括他們鎖定的資源,它可以幫助你識別死鎖狀態。

+2

我認爲這個問題涉及應用程序運行期間有關鎖爭用的一些統計信息 - 這是系統中的熱門鎖。 – akarnokd 2009-06-25 13:43:36

2

VisualVM的(Java 1.6的部分)(see

+0

VisualVM是否需要一個單獨的插件? – akarnokd 2009-06-25 13:19:03

2

JDK有一些內置的支持 - 在unix下,殺死-3進程,在windows下,ctrl-break。這將顯示一個完整的線程轉儲,然後檢測到任何死鎖。另外,在線程dusmp中,您可以看到哪些線程擁有哪些鎖,並將它們相互比較。

+1

您不需要爲了獲得線程轉儲而終止進程 - 只需運行jstack ,其中是進程標識。 – 2013-01-06 13:28:25

+3

kill -3命令不會終止進程。它只是表明它,但過程將繼續運行。 – 2013-01-06 13:47:56

3

你也可以在eclipse的調試器中查看它。在「調試」視圖中,使用視圖工具欄上的小下三角菜單打開「Java->顯示監視器」。

當您懷疑發生死鎖時,暫停應用程序(在調試視圖中選擇應用程序,然後按下調試視圖工具欄上的暫停按鈕),如果發生死鎖,則阻塞線程將變爲紅色。如果展開這些線程,您可以看到鎖爭用。

2

如果您擁有該代碼,則可以創建/查找收集爭用統計信息的Lock實現。如果不是,請嘗試其他帖子中建議的工具。

相關問題