簡體   English   中英

嘗試通過 JMX 連接時,本地 java 進程呈灰色

[英]Local java processes are grayed when trying to connect via JMX

我在 windows XP 專業機器上運行了多個 java 進程。 當我嘗試通過本地 JConsole 連接到這些進程時,進程顯示為灰色。

但是我可以在另一台機器上運行相同的進程並通過該機器上的本地 JConsole 進行連接。

兩台機器都運行 java 1.6 版本的進程和 jconsole。

知道為什么這些過程變灰了嗎?

我現在正在解決這個問題,我找到了一個解決方法:

您可以將本地用戶的臨時目錄更改為他們絕對可以訪問的內容(例如 D:\\temp)。 確保為您嘗試監視的進程和 jconsole 進程執行此操作。

另一件顯然會導致問題的事情是其中包含大寫字母的用戶名。 該目錄將始終使用所有小寫字母創建,但只需將其重命名為它在任務管理器中的顯示方式即可使所有問題消失: http : //planeofthought.com/wp/?p=75

如果進程以不同的用戶身份運行(例如,如果您將它們作為服務啟動),那么您將無法連接到它們。 此外,如果他們在較舊的 jvm 下運行,您很可能也無法與他們交談。

在某些情況下,本地 jmx 通信機制使用本地文件系統,如果權限定義不正確,可能會出現問題。 您是否可能在網絡文件系統(nfs、samba)上運行這些進程中的任何一個?

假設您用來啟動在任務管理器中看到的 Java 應用程序的 Windows 用戶名是 YOUR_USER_NAME。 請檢查臨時文件夾中名稱類似於 hsperfdata_XXXXX(XXXXX 應該是您的用戶名)的文件夾,並確保 YOUR_USER_NAME 和 XXXXX 完全相同(注意大小寫)。

http://download.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html

不可附加的應用程序,禁用了管理代理。 其中包括在 J2SE 1.4.2 平台上啟動的應用程序或在沒有-Dcom.sun.management.jmxremotecom.sun.management.jmxremote.port選項的 J2SE 5.0 平台上啟動的應用程序。 這些應用程序在表中顯示為灰色,並且 JConsole 無法連接到它們。 在圖 3-1 所示的示例連接對話框中,Anagrams 應用程序使用 J2SE 5.0 平台 VM 啟動,沒有任何管理屬性來啟用 JMX 代理,因此顯示為灰色且無法選擇。

圖 3-1 創建到本地進程的連接
(來源: oracle.com

不管文檔中寫了什么,很可能您的進程是在不同的用戶下運行的。 您可以以管理員身份運行jconsole ,然后嘗試。

這對我有用。 我將%TEMP%%TMP%環境變量更改為指向我在%HOME%位置創建的文件夾(如C:\\Users\\[YOUR_NAME]\\Temp )。 一旦我這樣做了,所有的問題都消失了。

我遇到了前面描述的問題,但建議使用更簡單的解決方案:只需關閉所有使用 Java 的程序(“IntelliJ IDEA”、“SoapUI”等 - 解鎖臨時文件夾),然后刪除%TMP%\\hsperfdata_<user.name>文件夾。 然后,在打開任何 Java 程序后,將重新創建此文件夾,但這次使用正確的名稱(很可能是%TMP%\\hsperfdata_<User.Name> )。 之后,本地 Java 進程可以通過“JConsole”或“VisualVM”(現在運行沒有啟動錯誤,鏈接到VisualVM:故障排除指南)再次監視。

而不是這些步驟,您只需轉到 CMD,然后輸入 jconsole.exe (PID)

記得去jconsole所在的路徑,然后運行可執行文件。

更改我在 C:\\Users\\pmimgg0\\AppData\\Local\\Temp\\hsperfdata_pmimgg0 找到的 hsperfdata 文件夾的名稱,以匹配在任務管理器上找到的用戶名。 將 hsperfdata_pmimgg0 更改為 hsperfdata_PMIMGG0 后,我的本地進程在 jconsole 上不再顯示為灰色。

在此處輸入圖片說明

將環境變量中的 TEMP 路徑更改為 D:\\temp 之類的內容,因為這可能是權限問題。 為我修復了這個問題

最好的方法是像運行遠程進程一樣運行本地進程

在運行時添加這些條件 arguments -

-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=6001
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=localhost
-Dcom.sun.management.jmxremote.rmi.port=6001

然后 select Remote Process 並指向 localhost:6001 如圖

JConsole 新建連接

點擊Connect,Jconsole連接成功。

對我來說,這是固定的,因為我有一些管理限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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