Java webstart堆转储

时间:2011-01-11 23:11:34

标签: 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”

2 个答案:

答案 0 :(得分:5)

根据Java 7 Release Notes,现在支持webstart应用程序(RFE: 6664424)的-XX:+ HeapDumpOnOutOfMemoryError选项。

答案 1 :(得分:3)

将此选项放在jnlp文件中时,它肯定无法正常工作。有一个允许的选项列表,其他选项将被忽略。您可以在documentation中查看可用的JVM选项列表。

请注意,最终用户将在他的计算机上运行您的应用程序。你会对他的comp上的堆转储做什么?它可能是世界上运行您的应用程序的任何人。如果允许您通过JNLP文件与最终用户JVM一起执行此操作,那将毫无意义。

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

  1. 下载JNLP文件
  2. 从命令行导航到包含JNLP文件的目录
  3. 执行javaws -verbose -J-XX:+HeapDumpOnOutOfMemoryError testOOM.jnlp
  4. 使用此应用程序将以与浏览器相同的方式启动。但请注意-J选项,它允许您向JVM提供JVM选项。这没关系,因为它是请求转储的ebd用户客户端。

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