尊敬的专家,
我有一个独立的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 应用程序。我在这里缺少什么想法
感谢和问候
最佳答案
感谢您的投入。我能够解决该问题,详细信息如下:
正如 @Holger 提到的,JConsole 和 JVisualVM 都可以连接到运行的本地 Java 应用程序,而无需任何 JMX 参数。我面临的问题是特定于机器的。我重新启动机器并删除了以下目录:
%TMP%\hsperfdata_User.Name
(我无法在不重新启动的情况下删除此目录)
重新启动 JConsole/JVisualVM 并能够使用进程 ID 连接到本地 java 进程。 事实上,JVisualVM 的使用让我找到了这个修复方法。在启动 JVisualVM 时,我收到一条错误消息,指出无法监视本地进程/应用程序之类的内容。该消息有一个链接到 Troubleshooting guide 。我正在复制相关片段:
Local Applications Cannot Be Monitored (Error Dialog On Startup)
Description: An error dialog saying that local applications cannot be monitored is shown >immediately after VisualVM startup. Locally running Java applications are displayed as Application> (pid ###).
Resolution: This can happen on Windows systems if the username contains capitalized letters. In >this case, username is UserName but the jvmstat directory created by JDK is >%TMP%\hsperfdata_username. To workaround the problem, exit all Java applications, delete the >%TMP%\hsperfdata_username directory and create new %TMP%\hsperfdata_UserName directory.
但是,在我的机器上目录具有以下格式:
%TMP%\hsperfdata_User.Name
所以,我的建议是: -检查上述目录的名称是否存在驼峰式大小写用户名 - 如果没有,请按照故障排除指南中的步骤操作 -如果问题仍然存在,请删除该目录(可能需要重新启动计算机,就像我的情况一样) - 重新启动JConsole/JVisualVM
希望问题能够得到解决。
感谢和问候
关于java - 在本地分析独立 Java 应用程序的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21258087/