4

Java HotSpot VM Options 中有以下两个选项:

-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 脚本。
最简单的方法是什么?

4

3 回答 3

5

IBM J9 JDK 通过-Xdump 标志提供上述能力;这是注册转储代理的首选方式。

配置 JVM 以在 OOME 上生成堆转储的典型方法是捕获应用程序或 JVM 抛出的所有内存不足错误,并准备转储以进行“遍历”(使用堆检查器)。

-Xdump:system+heap+java:events=systhrow+user,filter=java/lang/OutOfMemoryError,request=exclusive+prepwalk+compact

参考:Eclipse 内存分析器指南

也可以使用JAVA_DUMP_OPTS环境变量。IBM JDK 诊断指南中提供了有关这方面的更多信息。

编辑

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

于 2010-08-12T13:00:06.867 回答
3

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

对于您的 OOM 案例,例如:

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

于 2010-08-12T13:00:34.917 回答
0

我希望 IBM 的 JVM 支持相同的标志,因为如果我没记错的话,它是 Sun JVM 的检测版本。是否可以比较主要 Java 版本之间的命令行选项?(即 Sun 1.6 与 IBM 1.4.2?)

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

于 2010-08-12T12:15:22.350 回答