在本地分析独立的Java应用程序以获取线程

时间:2014-01-21 12:25:03

标签: java windows multithreading monitoring

尊敬的专家,

我有一个独立的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应用程序。任何想法我在这里失踪

谢谢和问候

1 个答案:

答案 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

希望问题能得到解决。

谢谢和问候