Java webstart堆转储

ben*_*ete 7 java java-web-start

我一直试图让webstart在内存不足时转储到堆转储.

我知道jmap/jconsole这样做的方式,但我真正想做的是将选项添加到jnlp文件并尝试了以下选项.

  1. j2se version ="1.6+"java-vm-args =" - server + HeapDumpOnOutOfMemoryError"max-heap-size ="768M"
  2. j2se version ="1.6+"java-vm-args =" - server -XX:+ HeapDumpOnOutOfMemoryError"max-heap-size ="768M"

小智 5

根据Java 7发行说明,webstart应用程序现在支持-XX:+ HeapDumpOnOutOfMemoryError选项(RFE:6664424).


Jan*_*yka 3

当您将此选项放入 jnlp 文件时,它肯定不起作用。有一个允许的选项列表,其他选项将被忽略。您可以在文档中查看可用 JVM 选项的列表。

请注意,这个想法是最终用户将在他的计算机上运行您的应用程序。您将如何处理他的计算机上的堆转储?它可能是世界上运行您的应用程序的任何人。如果允许您通过 JNLP 文件对最终用户 JVM 执行此操作,则没有多大意义。

我能想到的唯一情况是您可以访问该计算机并且可以稍后检查转储。在这种情况下(您作为最终用户请求转储),如果您从浏览器绕过 jnlp 文件的自动运行并通过命令自行运行它,实际上是可能的javaws。我所采取的成功步骤如下(假设 jnlp 文件是testOOM.jnlp并且您在 Windows 上):

  1. 下载JNLP文件
  2. 从命令行导航到包含 JNLP 文件的目录
  3. 执行javaws -verbose -J-XX:+HeapDumpOnOutOfMemoryError testOOM.jnlp

使用此应用程序将以与浏览器相同的方式启动。但请注意-J允许您向 JVM 提供 JVM 选项的选项。这是可以的,因为请求转储的是 ebd 用户客户端。

堆转储OutOfMemoryError将存储在您运行javaws命令的同一目录中。