2011-06-02 115 views
0

我想知道是否可以使用JVMTI在Java中動態檢測死鎖。有兩個事件使用synchronized聲明顯示在監視器上操作:使用JVMTI進行死鎖檢測

監視器爭鳴輸入

發送當線程試圖進入一個Java編程語言監視器已經被另一個線程獲得

監視器爭進入

當一個線程在等待被另一線程釋放後進入Java編程語言監視器發送。

這意味着,與JVMTI我只能看到那些已經鎖定的顯示器。我想重建一個等待圖,但沒有事件表明我,獲得的鎖是而不是由任何線程持有。這是不可能的。

有替代品嗎? Unix上的SIGQUIT命令允許顯示死鎖的線程轉儲,看起來這在JVMTI中是不可能的。

回答

1

您應該能夠通過JMX獲取此信息。

嘗試

ManagementFactory.getThreadMXBean().findMonitorDeadlockedThreads(); 
+0

是的,但這將是使用Java代理,而不是本地代理。 – 2011-06-02 15:35:40

+0

您可以從本地代碼調用Java代碼。我看不出有什麼問題。 – 2011-06-02 15:37:19

+0

如何將這一行代碼轉換爲字節碼? – 2011-06-02 15:39:22