我正在尝试使用visualVM来分析我正在使用Intellij进行调试的简单Java应用程序。我启动应用程序来调试,打开visualVM,我可以在列表中看到我的应用程序。我可以打开它;但是,我无法对我的应用程序使用抽样或分析。其他应用程序,如Intellij,可以很好地分析。当我检查visualVM日志时,我看到:
INFO [com.sun.tools.visualvm.jmx.impl.JmxModelImpl]:connect(2749) com.sun.tools.attach.AttachNotSupportedException:无法打开套接字文件:目标进程未响应或未加载HotSpot VM
更多信息: 操作系统=在x86_64上运行的Mac OS X版本10.9.1 Java的; VM;供应商= 1.7.0_51; Java HotSpot(TM)64位服务器VM 24.51-b03;甲骨文公司 Intellij IDEA = 13.0.2
如果有人这样做,请告诉我你是怎么做到的。我也想使用Intellij VisualVMLauncher,如果我能顺利的话。
答案 0 :(得分:17)
也许this helps:
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9010 \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar xxx.jar
答案 1 :(得分:10)
这看起来是JDK bug #8023786。在JDK 7u60中修复此问题之前,您可以使用-XX:+ StartAttachListener运行配置文件应用程序。有关此错误的一些详细信息也在this电子邮件主题中。
答案 2 :(得分:3)
我在运行独立的visualvm时遇到过类似的问题。相反,尝试运行与用于运行应用程序的相同jdk捆绑的visualvm(在我的情况下为c:\ jdk1.7.0 \ bin \ jvisualvm.exe),它可能首先不需要jmx。
答案 3 :(得分:1)
我尝试了Tomas Hurka的建议:将-XX:+StartAttachListener
添加到运行配置中。在连接到新的调试过程时,我同样使用visualvm挂起。
在我的情况下,我正在运行 JUnit 测试文件。我在测试中设置了几个断点。事实证明,当我单击resume program execution
按钮(fn+F9 in Mac OSX)
并在测试中的新断点处停止时,visualvm不再挂起,并且已成功记录CPU使用率,直到执行该点。 (之前它说我的JVM没有CPU使用率。)
我能够最终启动CPU采样,甚至从断点开始校准visualvm分析器。在按resume execution
足够多次测试结束后,我有一个完整的快照,我可以保存为csv。
因此,暂时只需在代码的最早合理行设置一个断点,并确保从此开启采样/分析。不太理想,但现在比为商业分析师支付巨额款项更好。
另外,事实证明我们并不是唯一一个有关使用visualVM问题的人,eclipse也有这个问题:Java VisualVM hangs connecting to locally process launched from eclipse
与代理使用有关的事情。在Cmd+Shift+A
中使用intelliJ
并搜索网络会为我带来这个有趣的结果(第二个搜索结果,在Edit Network options
下方):
'您将JVM
属性java.net.useSystemProxies
设置为true。这将导致某些网络调用通过操作系统定义的代理。如果您不打算使用系统定义的代理,请禁用此属性。'
我没有进一步研究这个途径,因为我似乎能够通过添加-XX:+StartAttachListener
来运行配置并明智地使用断点和“恢复程序执行”来解决VisualVM中的问题。 #39;按钮。
供参考,我在Retina MBP 2013,OSX Mavericks和JDK 8上使用IDEA 14 Community Edition,Project SDK和VisualVM都来自同一个oracle JDK(JDK 8)。
我希望这有一些帮助,这个问题持续了将近一年是荒谬的。
答案 4 :(得分:0)
如果可以帮助任何人,我发现的解决方案是通过VisualVM launcher plugin for IntelliJ在IntelliJ中启动该应用程序。它通过Glassfish上的Web应用程序为我工作。