【发布时间】:2011-10-29 02:17:05
【问题描述】:
在 Java 分析中,现在似乎所有(免费)道路都通向 JDK6 中包含的 VisualVM 分析器。它看起来像一个很好的程序,每个人都吹捧如何将“附加到正在运行的进程”作为主要功能。问题是,这似乎是在本地进程上使用它的唯一方法。我希望能够在分析器中启动我的程序,并跟踪其整个执行过程。
我曾尝试使用how to profile application startup with visualvm 中描述的-Xrunjdwp 选项,但是在两种传输方法(共享内存和服务器)之间,对我来说都没有用。 VisualVM似乎与前者没有任何集成,VisualVM拒绝连接localhost或127.0.0.1,所以后者也不好。我还尝试在我的程序中插入一个简单的System.in 读取以插入执行暂停,但在这种情况下,VisualVM 会阻塞直到读取完成,并且在执行完成之前不允许您开始分析。 我也尝试过查看the Eclipse plugin,但该网站充满了死链接,当我尝试使用它时,启动器会崩溃并显示(这可能不再准确)。
NullPointerException
来自 C 语言,这对我来说似乎不是一项特别困难的任务。我只是错过了什么还是这真的是一个不可能的要求?我愿意接受任何类型的建议,包括使用不同的(也是免费的)分析器,而且我不反对命令行。
【问题讨论】:
-
按照您提到的那个问题,您是否尝试过
suspend=y,而不是发布的suspend=n?如果是这种情况,您就不需要阅读System.in。 -
是的,但没关系。无论
suspend参数如何,我都看不到任何将程序连接到VisualVM 的方法。 -
那里应该有一个“适当的”。当然,VisualVM 可以看到这个过程。问题是它无法对其进行分析。
-
啊,我明白你现在正在尝试什么。
suspend=y标志适用于了解 JDWP 协议的分析器。 VisualVM 与那些分析器不同,因此您会发现它只会等待,而不连接到应用程序打开的端口,应用程序也会等待。我会尽快发布答案;需要弄清楚一些细节。 -
我在 visualvm.java.net/eclipse-launcher.html> 没有看到任何死链接。你能给我看一些吗?