JVisualVM:无法检测到本地应用程序

3
我想使用JVisualVM来监控一个本地的Java应用程序。但是当我启动它时,会弹出“无法监视本地Java应用程序”或“无法检测到本地应用程序”的提示。我在这里读到,这是一个权限问题。每次当我将文件夹%TMP%hsperfdata_MY_USER_ID的完全访问权限分别授予给我(登录用户)和所有人(Windows用户)后,当我启动JVisualVM时,权限就会被重置。
我知道另一个解决方案是删除hsperfdata_MY_USER_ID,但为什么权限设置不起作用呢?权限文件夹的重置是Windows的一个特性吗?
系统:Windows 7
已在以管理员身份启动的cmd上进行了测试。我使用相同的账户,并没有传递任何JVM参数,如com.sun.management.jmxremote.port=XXXX。

你需要传递哪些参数给 JVM 才能启用 VisualVM 的监控?VisualVM 和应用程序是否在同一个账户下运行? - Marged
嗨,Marged,我使用相同的帐户,没有传递任何参数。你是指这些之一 com.sun.management.jmxremote.port=XXXX 吗? - Paweł Dulęba
我将你的评论移到了问题正文中。应用程序是如何运行的?它是作为服务运行,还是手动运行? - Necreaux
@PawełDulęba是的,我在谈论这些。请尽量具体说明它们,不要将程序作为服务运行(如果你以前这样做了)。 - Marged
@Marged,好的,我会检查一下。谢谢你的建议! - Paweł Dulęba
原始的 'here' 链接已失效,更新链接为:https://visualvm.github.io/troubleshooting.html#jpswin - Manuel
4个回答

5
对于那些使用FAT文件系统的人:

  • 在NTFS磁盘上创建一个目录(例如e:\ temp)。
  • 使用环境变量TMP=E:\ temp同时启动javajvisualvm

有三种方法可以为Java设置环境变量:

  • 在您的IDE中,转到项目选项或启动选项,找到“环境”条目,然后输入TMP=E:\ temp
  • 打开一个cmd提示符,在从同一提示符启动您的Java应用程序之前,执行set TMP=E:\ temp
  • 将您要在cmd提示符中输入的两行代码放入.bat文件中。可选择在bat文件末尾添加pause,以防止在运行时异常或VM崩溃时控制台窗口消失。

类似地,对于JVisualVM,请使用最后两个选项之一。


我不建议在整个系统范围内设置TMP环境变量。 - Mark Jeronimus

2
我遇到了“本地应用程序无法被监测”的问题,通过以下方法解决:
  1. 退出所有java进程
  2. 删除现有文件夹%TMP%\hsperfdata_username
  3. 启动jvisualvm,它会创建一个带有不同大小写的文件夹:%TMP%\hsperfdata_USERNAME
我的问题和解决方案与权限无关,因此可能无法解决原问题。
另请参见https://visualvm.github.io/troubleshooting.html#jpswin

0

这个答案可能有点琐碎,但仍然可以节省时间。

检查您的Java应用程序是否没有使用“-XX:-UsePerfData”选项启动。


0

我的用户名:A4000000

我不得不删除 C:\Users\A4000000\AppData\Local\Temp\hsperfdata_a4000000

AppData 是一个隐藏的文件夹。

然后再次启动 VisualVM,它创建了以下内容:

 C:\Users\A4000000\AppData\Local\Temp\hsperfdata_A4000000

注意 大小写 的不同。

然后开始:

C:\visualvm_213\bin>  visualvm.exe --jdkhome "C:\Program Files\Java\jdk1.8.0_202" --userdir "C:\Temp\visualvm_userdir"

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