为什么当WildFly作为服务启动时,Java VisualVM没有显示它?

3

我的电脑操作系统是Windows 7专业版64位。

我正在使用JDK 7 Update 80。

我正在使用WildFly 8.2.1。

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

然后我将WildFly安装为服务。当我启动服务时,在Java VisualVM中找不到它。怎么会这样?服务运行得很好。只是Java VisualVM没有选择它,这很奇怪。如何解决这个问题?


您是否以管理员身份运行VisualVM?您的WildFly服务是否设置为以特定用户身份运行? - watery
@watery 我正在以管理员身份运行VisualVM。我的WildFly服务是作为“本地系统”登录的。 - srh
2个回答

4
当Java程序运行时,它会将进程ID存储在用户特定的存储中(文件/注册表/内存?并不重要!)。当VisualVM启动时,它会从该存储中显示列表。
由于您的服务以不同的用户身份运行,因此VisualVM无法“看到”它。如果服务启用了Java进程仍然可以连接,只需手动进行连接,例如输入端口号。

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

用户是SYSTEM是什么意思?那个临时文件夹在哪里? - zygimantus
我猜这就是问题所在,你无法访问临时文件夹或系统用户。使用用户身份运行工作流,然后你就可以连接 VisualVm 了。 - Mikhail Chibel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接