如何为 -XX:AbortVMOnException 定义多个错误

How to define multiple errors for -XX:AbortVMOnException

我依赖的库因某些错误而挂起,我无法修复!违规者目前是 WhosebugErrorOutOfMemoryError,但可能还有更多。

我正在尝试将不可恢复的挂起升级为 exit/abort。但是,我无法弄清楚如何将多个不同的错误传递给 -XX:AbortVMOnException,因为只有最新的参数在:

中处于活动状态
JAVA_OPTS="-XX:+UnlockDiagnosticVMOptions -XX:AbortVMOnException=java.lang.WhosebugError -XX:java.lang.OutOfMemoryError" foo

AbortVMOnException 选项只能有一个值。

JVM 在检查异常 class 是否匹配 AbortVMOnException 值时执行 substring search。例如。 -XX:AbortVMOnException=Error 将导致 VM 在其名称中带有 Error 的任何可抛出对象上中止:java.lang.WhosebugErrorjava.lang.OutOfMemoryErrorjava.lang.NoClassDefFoundError

要在所需的异常类型上添加自定义回调,您可以使用 this answer 中描述的 JVM TI 方法。你只需要更换

if (strcmp(class_name + 1, fatal_error_class) == 0) {

if (strstr(fatal_error_class, class_name + 1) != NULL) {

然后可以指定多个导致VM退出的异常类型:

java -agentpath:/path/to/libabort.so=java/lang/WhosebugError,java/lang/OutOfMemoryError ...