我在一台Windows XP专业版机器上运行了许多Java进程。当我尝试通过本地JConsole连接这些进程时,这些进程会变成灰色。
但是,我可以在另一台机器上运行相同的进程,并通过该机器上的本地JConsole进行连接。
这两台机器上的进程和JConsole都运行着Java 1.6版本。
这些进程为什么会变成灰色?有什么想法吗?
我在一台Windows XP专业版机器上运行了许多Java进程。当我尝试通过本地JConsole连接这些进程时,这些进程会变成灰色。
但是,我可以在另一台机器上运行相同的进程,并通过该机器上的本地JConsole进行连接。
这两台机器上的进程和JConsole都运行着Java 1.6版本。
这些进程为什么会变成灰色?有什么想法吗?
我正在与这个问题做斗争,发现了一个解决方法:
您可以将本地用户的临时目录更改为他们肯定可以访问的目录(例如D:\temp),请确保为您要监视的进程和jconsole进程执行此操作。
还有一件事,似乎会导致问题的是用户名中包含大写字母。该目录始终将被创建为所有小写字母,但仅将其重命名为在任务管理器中显示的名称,问题就会消失:http://planeofthought.com/wp/?p=75
假设您在任务管理器中看到启动Java应用程序所使用的Windows用户名为YOUR_USER_NAME,请检查一个名称类似于hsperfdata_XXXXX(XXXXX应该是您的用户名)的文件夹是否存在于您的临时文件夹中,并确保YOUR_USER_NAME和XXXXX完全相同(注意大小写)。
-Dcom.sun.management.jmxremote
或com.sun.management.jmxremote.port
选项的应用程序。这些应用程序在表格中显示为灰色,JConsole无法连接到它们。在图3-1所示的示例连接对话框中,Anagrams应用程序是使用J2SE 5.0平台VM启动的,没有任何管理属性来启用JMX代理,因此以灰色显示,无法选择。
jconsole
并尝试连接。com.sun.management.jmxremote.port
并使用"远程进程" 连接,但对我来说并不是最佳解决方案,因为我有很多正在运行的进程,并为它们分配唯一的端口是有问题的。 - sourcedelica%TMP%\hsperfdata_<user.name>
文件夹。 然后,在打开任何Java程序后,此文件夹将被重新创建,但这次使用正确的名称(很可能是%TMP%\hsperfdata_<User.Name>
)。之后,本地Java进程可以再次通过“JConsole”或“VisualVM”(现在可以在VisualVM:故障排除指南中找到链接并无错误启动)进行监视。不必按照这些步骤操作,只需进入命令提示符并键入jconsole.exe (PID)即可。
记得进入jconsole所在的路径,然后运行可执行文件。
这是对我有用的方法。我更改了我的%TEMP%
和%TMP%
环境变量,使它们指向我在%HOME%
位置创建的文件夹(例如C:\Users\[YOUR_NAME]\Temp
)。一旦我这样做了,所有问题都消失了。
最好的方法是像远程进程一样运行本地进程。
在运行时参数中添加这些条件 -
-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
然后选择远程进程并指向本地主机:6001,如图所示
点击连接,Jconsole已成功连接。
对我来说,这是解决了我的一些管理员限制问题。