为什么Java VisualVM在作为服务启动时不显示WildFly?

时间:2015-08-28 23:44:07

标签: java wildfly jvisualvm

我的电脑的操作系统是Windows 7 Professional 64位。 我正在使用JDK 7 Update 80。 我正在使用WildFly 8.2.1。

当我将WildFly作为控制台启动时,在Java VisualVM中我可以看到它。

然后我安装WildFly作为服务。当我启动服务时,我在Java VisualVM中看不到它。怎么会?服务运行良好。它只是没有被Java VisualVM挑选出来,这很奇怪。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

当Java程序运行时,它会将进程ID存储在特定于用户的存储(文件/注册表/内存?真的不重要!)中。当VisualVM启动时,它会显示该存储的列表。

您的服务是以不同的用户身份运行的,因此VisualVM无法看到"它。 VisualVM仍然可以连接到Java进程,如果由服务启用,您只需手动执行,例如,输入端口号。

答案 1 :(得分:2)

jvisualvm通过查看%TMP%\hsperfdata_username文件夹来发现本地运行的应用程序,其中%TMP%是运行该进程的Windows用户的临时文件夹。

  • 对于作为服务运行的java进程,这可能位于C:\Windows\TempC:\Windows\System32\Config\systemprofile\AppData\Local\Temp(假设临时文件夹在环境变量中配置为TMP =%USERPROFILE%\ AppData \ Local \ Temp)
  • 对于在普通用户下运行的应用程序,pid文件将位于C:\Users\yourUser\AppData\Local\Temp\hsperfdata_yourUser

如果jvisualvm和您要监视的进程不使用同一用户运行,则visualVm将找不到该应用程序。要解决此问题,您可以临时指向TMP环境变量以查看相同的临时文件夹。

要监控Wildfly应用程序服务器,您需要运行jvisualvm:

C:\> set TMP=c:\Users\wildfly_user\AppData\Local\Temp
C:\> jvisualvm.exe -cp:a c:\wildfly\bin\client\jboss-client.jar

有关jvisualVm故障排除的更多信息,请访问https://visualvm.java.net/troubleshooting.html?Java_VisualVM