如何为 -XX:AbortVMOnException 定义多个错误
How to define multiple errors for -XX:AbortVMOnException
我依赖的库因某些错误而挂起,我无法修复!违规者目前是 WhosebugError
和 OutOfMemoryError
,但可能还有更多。
我正在尝试将不可恢复的挂起升级为 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.WhosebugError
、java.lang.OutOfMemoryError
、java.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 ...
我依赖的库因某些错误而挂起,我无法修复!违规者目前是 WhosebugError
和 OutOfMemoryError
,但可能还有更多。
我正在尝试将不可恢复的挂起升级为 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.WhosebugError
、java.lang.OutOfMemoryError
、java.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 ...