如何为JVM参数-XX:AbortVMOnException配置多个触发中止的异常类
配置失效的核心原因
- HotSpot VM处理重复声明的同一诊断参数时,会默认用最后一次传入的参数值覆盖之前的配置,这是常规写法下只有最后一个参数生效的根本原因
- 你给出的示例存在格式错误:第二个JVM配置项直接将异常类名作为参数名,写为
-XX:java.lang.OutOfMemoryError,属于无效配置,会被VM直接忽略
正确配置方式
-XX:AbortVMOnException原生支持在单个参数值内,使用英文逗号分隔多个需要触发VM中止的异常/错误全限定类名,不需要重复声明同一参数- 正确的启动配置示例:
JAVA_OPTS="-XX:+UnlockDiagnosticVMOptions -XX:AbortVMOnException=java.lang.StackOverflowError,java.lang.OutOfMemoryError" foo
注意事项
- 配置的类名必须填写完整全限定名,不支持简写类名,否则VM无法完成异常匹配
- 该参数的触发逻辑为:当指定的异常/错误从调用栈向上抛出,进入未捕获异常处理流程时,直接触发VM中止,适配第三方库遇到这类不可恢复错误后挂起的场景;如果第三方库捕获了这类错误但未做合理处理导致挂起,该配置不会触发,需要单独排查对应捕获逻辑
- 后续新增其他需要触发VM中止的同类错误时,只需在参数值的逗号分隔列表中追加对应全限定类名即可,不需要新增独立的JVM参数
内容的提问来源于stack exchange,提问作者Sim
相关产品推荐
相关产品推荐

