如何使用VisualVM分析应用程序的启动过程

59
4个回答

19

使用Eclipse启动器,在主方法中设置一个合适的断点。

然后,在调试模式下启动,启用VisualVM中的分析功能,然后在Eclipse中恢复执行。

这样做无法对类加载等内容进行分析,但对我来说已经足够了。


13

您是否正在使用"-Xrunjdwp"命令行选项设置分析?如果是,那么该选项有一个"暂停"参数专门用于此目的

如果目标虚拟机在加载主类之前立即暂停,则为True;否则为False。

以下是我自己配置的示例:

-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

我在使用YourKit分析器时使用了这个方法,但我认为原理是相同的。


我没有使用Xrunjdwp选项,我应该使用吗?suspend的默认值是'true',这不正确吗? - pstanton
@pstanton:我不太确定Xrunjdwp的具体作用和使用方法。建议你去了解一下,看看能否使用它。 - skaffman
@pstanton:你最终使用的确切-Xrunjdwp命令是什么?当我尝试与VisualVM一起使用它时,VisualVM无法正确连接到JVM进程。 - Jim Hurne
抱歉,Jim,我放弃了。我实际上编写了一些代码,使得我的程序暂停直到按钮被点击...然后我会在连接分析器之后再点击它 ;) - pstanton
2
然而,其他地方的答案声称 -Xrunjdwp 无效。请参见 https://dev59.com/yWw05IYBdhLWcg3wrDpS - Raedwald
-Xrunjdwp 中的 jdwp 代表 Java 调试线协议。请注意单词 Debug - Ahmad Tn

10

我发现Startup Profiler很有帮助:

VisualVM 1.3.6 的 Startup Profiler 插件可以从启动时对本地 Java 5+ 应用程序进行仪器化分析。当对短时间运行的进程进行分析时,它也非常有用。


9
这对我来说最终起作用了,但请确保下载单独的VisualVM应用程序,不要试图重复使用随JDK提供的那个;由于某种原因,启动分析器插件在原版JDK中不可用。 - Max

0

常见的Java开发环境(NetBeans / Eclipse)都支持直接使用附加的VisualVM执行应用程序。在Eclipse的情况下,您需要安装插件。在NetBeans的情况下,支持已经集成。
即使没有源代码,您仍然可以通过这两个环境运行JAR文件,并因此启动连接到VisualVM的应用程序。


1
Eclipse插件无法协助此操作。它只是在启动进程时启动VVM。 - pstanton

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