2014-01-21 37 views
0

尊敬的專家,分析獨立Java應用程序本地線程

我有一個獨立的Java應用程序,並希望監視它創建的線程。我打算使用像JConsole或JVisualVM這樣的工具。但是,我無法將這些工具本地連接到我的Java應用程序。

我正在使用Windows機器。 JConsole和Java程序在本地運行。我試圖用以下JMV參數沒有成功運行Java應用程序:

java -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false LinkedListTest 

當我嘗試使用JConsole的連接,我的進程ID會顯示爲灰色,並出現以下消息:

  • 注:管理代理未啓用此進程

我想我應該可以將JConsole連接到獨立的Java應用程序。任何想法我在這裏失蹤

感謝和問候

+0

試試這個:-Dcom.sun.management.jmxremote – edharned

+0

感謝@edhamed的建議。這沒有幫助:java -Dcom.sun.management.jmxremote LinkedListTest –

+2

'JVisualVM'不需要本地Java應用程序的這些命令行選項。如果尚未運行,它將通過附加API啓動管理代理本身。只需啓動'JVisualVM'並雙擊提供的列表中的右側JVM即可。 – Holger

回答

3

感謝您的投入。我能夠解決這個問題,具體如下:

正如@Holger所提到的,JConsole和JVisualVM都可以連接到沒有任何JMX參數的本地Java應用程序。我面臨的問題是機器特定的。我重新啓動機器,並刪除以下目錄:

%TMP%\ hsperfdata_User.Name

(我無法刪除這個目錄沒有做重​​新啓動)

重啓動的JConsole/JVisualVM並能夠使用進程ID連接到本地java進程。事實上,使用JVisualVM指出我正在修補這個問題。在JVisualVM啓動時,我收到一條錯誤消息,指出本地進程/應用程序無法被監控。該消息有鏈接到Troubleshooting guide。我再生的相關片段:

本地應用程序不能被監視(錯誤對話框啓動)

說明:一個錯誤對話框,說顯示> VisualVM的啓動後立即本地應用不能被監視。本地運行的Java應用程序顯示爲應用程序>(pid ###)。

解決方法:如果用戶名包含大寫字母,則可能發生在Windows系統上。在這種情況下,用戶名是UserName,但由JDK創建的jvmstat目錄>%TMP%\ hsperfdata_username。要解決該問題,請退出所有Java應用程序,刪除>%TMP%\ hsperfdata_username目錄並創建新的%TMP%\ hsperfdata_UserName目錄。

然而,在我的機器目錄有以下格式:

%TMP%\ hsperfdata_User。名

所以,我的建議是: -check駱駝的情況下,用戶名 的存在 - 如果不是,請從故障排除指南 步驟 - 如果問題仍然存在上述目錄的名稱,刪除目錄(可能需要重新啓動機器,就像我的情況一樣) -Restart JConsole/JVisualVM

希望問題得到解決。

感謝和問候

+0

感謝您的刪除文件夾的解釋!這解決了我的問題!但是,您不必重新啓動系統。只有確保Eclipse沒有運行,並且任務管理器(OS:Windows 7)中沒有Java進程。 – mrbela

+0

感謝@mrbela您的觀察。如果應用程序或進程正在使用文件或文件夾,Windows將不允許刪除。因此,關閉/退出這些應用程序和進程可能有助於避免重新啓動Windows。感謝致敬 –