如何在Java WebStart(JNLP)应用程序中获取多个hprof转储?

时间:2009-08-12 20:52:53

标签: java profiling hprof

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

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

然后我可以随时点击ctrl- \(或Windows上的ctrl-break)我想拍摄堆的快照供以后分析。

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

2 个答案:

答案 0 :(得分: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服务器并根据需要进行堆转储。源代码包含评论,其中包含指向互联网上2篇有用文章的链接,这些文章帮助我完成了所有这些工作。祝你好运!

链接:JmxHeapDumper.java

P.S。显然让JMX开始使用WebStart应用程序很棘手,我找到了这个讨论,希望它有所帮助:http://forums.java.net/jive/message.jspa?messageID=311717

答案 1 :(得分:0)

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