我正在尝试使用 Eclipse VisualVM启动器。看起来很不错,只是如果 VisualVM 来不及对我的应用程序进行任何分析,它似乎会生成一个实例。我的应用程序甚至在分析器初始化之前就完成了执行;一旦启动,就会弹出一个错误窗口,说:cannot open requested application
. 然后它显示运行 Eclipse 的 VM(标记为“org.eclipse.equinox.launcher.Main”)。我怎样才能让它等待我的应用程序并进行正确的分析?
5 回答
这可能为时已晚,但我遇到了同样的问题,设置断点然后在调试模式下启动根本没有帮助。我最终发现 VisualVM 将其临时数据保存在文件夹 %TMP%/hsperfdata_[username] 中,例如,在我的 Windows 机器上,该文件夹是 C:\Users\Jacob\AppData\Local\Temp\hsperfdata_Jacob。事实证明,该进程没有足够的权限来访问该文件夹,所以我放宽了它的权限,现在它工作得很好。希望这对有同样问题的人有用!
我知道那个问题。我一直想出的唯一穷人的解决方案是:
- 在源代码中设置断点
- 以调试模式启动程序
- 连接分析器
- 让程序继续
VisualVM 将分析代理注入您的 VM 只需要一点时间,我很确定它只允许远程分析。
作为替代方案,您可以使用YourKit,它可以从一开始就分析您的应用程序。通过这种方式,分析代理在 VM 启动时被注入:
java -agentpath:c:\yourkit\yjpagent.dll FooClass
我很好奇为什么 VisualVM 不提供这个选项,因为它在技术上是可行的。无论如何,我认为调试技巧是 Eclipse 中的一个很好的解决方案,除非您也对类加载等感兴趣。
在 Windows 上,以管理员身份运行 Eclipse。
这是一个愚蠢的解决方案,但有效。它是这样的:
向您的应用程序添加一个无限循环包装器,例如“while(true) { your_app }”。
随着程序运行时间的延长,计时噪音也会变得均匀。
您只需以管理员用户 (Windows 10) 的身份运行 VisualVM 可执行文件。