IBM JVM 中是否有类似于“-XX:OnError”或“-XX:OnOutOfMemoryError”的选项?

4

Java HotSpot虚拟机选项中有以下两个选项:

-XX:OnError="<cmd args>;<cmd args>" Run user-defined commands on fatal error. (Introduced in 1.4.2 update 9.) 

-XX:OnOutOfMemoryError="<cmd args>; 
<cmd args>" Run user-defined commands when an OutOfMemoryError is first thrown. (Introduced in 1.4.2 update 12, 6) 

据我所知,在IBM JVM中没有这样的选项。
如果生成了堆转储文件,我需要调用一些shell脚本。最简单的方法是什么?
3个回答

5
IBM J9 JDK可以通过-Xdump flag来实现该功能;这是注册转储代理的首选方式。
一种典型的配置JVM在OOME时生成堆转储的方法是捕获应用程序或JVM抛出的所有Out Of Memory错误,并为“遍历”(使用堆检查器)准备转储。
-Xdump:system+heap+java:events=systhrow+user,filter=java/lang/OutOfMemoryError,request=exclusive+prepwalk+compact

参考资料:Eclipse Memory Analyzer指南

JAVA_DUMP_OPTS环境变量也可以使用。更多信息可在IBM JDK诊断指南中获取。

编辑

为了在OOME上运行命令,需要在-Xdump选项中指定工具选项


3

-Xdump 是你的好朋友,非常强大。

对于你的OOM情况,可以使用以下内容:

"-Xdump:tool:events=throw,filter=*OutOfMemoryError,exec=cmd_to_run


0

我认为IBM的JVM应该支持相同的标志,因为如果我没记错的话,它是Sun JVM的一个有仪器的版本。你能否比较Java的主要版本之间的命令行选项?(例如Sun 1.6与IBM 1.4.2?)

如果您找不到标志的解决方案,您可以利用IBM JVM通过将转储文件的完整路径附加到/tmp/dump-locations文件来更新它。自上次运行以来,cron作业可以在该文件被触摸时运行您的脚本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接