我一直试图让webstart在内存不足时转储到堆转储。
我知道jmap / jconsole这样做的方式,但我真正想做的是将选项添加到jnlp文件并尝试了以下选项。
答案 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上):
javaws -verbose -J-XX:+HeapDumpOnOutOfMemoryError testOOM.jnlp
使用此应用程序将以与浏览器相同的方式启动。但请注意-J
选项,它允许您向JVM提供JVM选项。这没关系,因为它是请求转储的ebd用户客户端。
在OutOfMemoryError
上,堆转储将存储在您运行javaws
命令的同一目录中。