0

使用 Java 控制台应用程序,我可以这样做:

java -agentlib:hprof=heap=dump,format=b MyClass

然后,我可以随时按 ctrl-\(或 Windows 上的 ctrl-break)对堆进行快照以供以后分析。

我想为 Java Web Start 应用程序做同样的事情,但我似乎无法让它工作。我可以使用 JAVAWS_VM_ARGS 环境变量传入 agentlib 参数,但是在控制台中输入 ctrl-\ 和 ctrl-break 似乎没有任何作用。我得到的只是一个转储,当程序启动时,这并不是很有趣,因为那时我什至还没有登录到我们的程序并执行我想要分析的事务。

4

2 回答 2

1

使用以下 JMV 参数启动应用程序以启用 JMX 并在端口 9004 上启动侦听器:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port="9004"
-Dcom.sun.management.jmxremote.authenticate="false"
-Dcom.sun.management.jmxremote.ssl="false"

然后看看这个 Java 程序,它可以连接到 JMX 服务器并按需进行堆转储。源代码包含评论以及 Internet 上 2 篇有用文章的链接,这些文章帮助我完成了所有这些工作。祝你好运 !

链接:JmxHeapDumper.java

PS 显然让 JMX 为 WebStart 应用程序启动很棘手,我发现了这个讨论,希望它有所帮助:http ://forums.java.net/jive/message.jspa?messageID=311717

于 2009-08-13T10:14:42.420 回答
0

您可以使用VisualVM从正在运行的应用程序中获取堆转储。VisualVM 允许您浏览和保存堆转储。

于 2009-08-12T21:10:58.533 回答