如何在 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 转储?的主要内容,如果未能解决你的问题,请参考以下文章

Java webstart max-heap-size 导致JVM无法启动

Java webstart 堆转储

为 JNLP 配置权限:

Java 安全错误

Applet/Web Start 安全性

如何将 Java 9 '--permit-illegal-access' 标志传递给 Webstart 应用程序?