尊敬的专家,
我有一个独立的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 :(得分:3)
感谢您的投入。我能够解决问题,详情如下:
正如@Holger所提到的,JConsole和JVisualVM都可以连接到没有任何JMX参数的本地Java应用程序。我面临的问题是机器特定的。我重新启动了机器并删除了以下目录:
%TMP%\ hsperfdata_User.Name
(我无法在不重新启动的情况下删除此目录)
重新启动JConsole / JVisualVM,并且能够使用进程ID连接到本地java进程。 实际上,JVisualVM的使用使我指向了这个修复。在JVisualVM启动时,我收到一条错误消息,指出无法监视本地进程/应用程序。该邮件中包含指向Troubleshooting guide的链接。我正在复制相关的片段:
无法监控本地应用程序(启动时出现错误对话框)
描述:在VisualVM启动后立即显示一个错误对话框,说明无法监视本地应用程序。本地运行的Java应用程序显示为Application> (pid ###)。
解决方案:如果用户名包含大写字母,则可能会在Windows系统上发生这种情况。在>这种情况下,用户名是UserName,但JDK创建的jvmstat目录是>%TMP%\ hsperfdata_username。要解决此问题,请退出所有Java应用程序,删除>%TMP%\ hsperfdata_username目录并创建新的%TMP%\ hsperfdata_UserName目录。
但是,我的机器目录中有以下格式:
%TMP%\ hsperfdata_User.Name
所以,我的建议是: - 检查上述目录的名称是否存在camel case用户名 - 如果没有,请按照故障排除指南中的步骤操作 - 如果问题仍然存在,请删除目录(可能需要重启机器,如我的情况) -Restart JConsole / JVisualVM
希望问题能得到解决。
谢谢和问候