如何在 Java WebStart (JNLP) 应用程序中获取多个 hprof 转储?
Posted
技术标签:
【中文标题】如何在 Java WebStart (JNLP) 应用程序中获取多个 hprof 转储?【英文标题】:How do I get multiple hprof dumps in a Java WebStart (JNLP) application? 【发布时间】:2009-08-12 20:52:52 【问题描述】:使用 Java 控制台应用程序,我可以这样做:
java -agentlib:hprof=heap=dump,format=b MyClass
然后我可以在任何时候按 ctrl-\(或 Windows 上的 ctrl-break)对堆进行快照以供以后分析。
我想为 Java Web Start 应用程序做同样的事情,但我似乎无法让它工作。我可以使用 JAVAWS_VM_ARGS 环境变量传入 agentlib 参数,但是在控制台中输入 ctrl-\ 和 ctrl-break 似乎没有任何作用。我得到的只是一个转储,当程序启动时,这并不是很有趣,因为那时我什至还没有登录我们的程序并执行我想要分析的事务。
【问题讨论】:
【参考方案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 服务器并按需进行堆转储。源代码包括 cmets 以及 Internet 上 2 篇有用文章的链接,这些文章帮助我完成了所有这些工作。祝你好运!
链接:JmxHeapDumper.java
附:显然让 JMX 为 WebStart 应用程序启动很棘手,我发现了这个讨论,希望它有所帮助:http://forums.java.net/jive/message.jspa?messageID=311717
【讨论】:
【参考方案2】:您可以使用VisualVM 从正在运行的应用程序中获取堆转储。 VisualVM 允许您浏览和保存堆转储。
【讨论】:
不幸的是,当我尝试使用 VisualVM 分析其内存时,我们的 Java Web Start 应用程序似乎崩溃了。以上是关于如何在 Java WebStart (JNLP) 应用程序中获取多个 hprof 转储?的主要内容,如果未能解决你的问题,请参考以下文章