我在 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.jmxremote
或com.sun.management.jmxremote.port
选项的 J2SE 5.0 平台上启动的应用程序。这些应用程序在表中显示为灰色,JConsole 无法连接到它们。在图 3-1 所示的示例连接对话框中,Anagrams 应用程序使用 J2SE 5.0 平台 VM 启动,没有任何管理属性来启用 JMX 代理,因此显示为灰色且无法选择。
(来源:oracle.com)
尽管文档中写了什么,但您的进程很可能在不同的用户下运行。您可以jconsole
以管理员身份运行,然后尝试。
这对我有用。我更改了我的%TEMP%
和%TMP%
环境变量以指向我在我的%HOME%
位置创建的文件夹(如C:\Users\[YOUR_NAME]\Temp
)。一旦我这样做了,所有的问题都消失了。
而不是这个步骤,你可以直接进入 CMD 然后输入 jconsole.exe (PID)
请记住转到 jconsole 所在的路径,然后运行可执行文件。
如前所述,我遇到了问题,但建议使用更简单的解决方案:只需关闭所有使用 Java 的程序(“IntelliJ IDEA”、“SoapUI”等 - 解锁临时文件夹),然后删除%TMP%\hsperfdata_<user.name>
文件夹。然后,在打开任何 Java 程序后,将重新创建此文件夹,但这次使用正确的名称(很可能是%TMP%\hsperfdata_<User.Name>
)。之后,可以再次通过“JConsole”或“VisualVM”(现在运行没有启动错误,并带有指向VisualVM:故障排除指南的链接)来监视本地 Java 进程。
将环境变量中的 TEMP 路径更改为 D:\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
然后选择 Remote Process 并指向 localhost:6001 如图
单击连接,Jconsole 连接成功。
对我来说,这是固定的,因为我有一些管理限制。