OpenJDK JVM 忽略 ExitOnOutOfMemoryError
OpenJDK JVM ignores ExitOnOutOfMemoryError
我在这个 Java 版本下有一个 Java 应用程序 运行:
openjdk version "1.8.0_162"
OpenJDK Runtime Environment (build 1.8.0_162-8u162-b12-1~deb9u1-b12)
OpenJDK 64-Bit Server VM (build 25.162-b12, mixed mode)
并且我在命令行上指定了选项 -XX:+ExitOnOutOfMemoryError
。但是最近我遇到了 OOME 场景,我在日志中看到了 OOME:
java.lang.OutOfMemoryError: unable to create new native thread
,但应用程序愉快地继续工作,没有退出。看起来在这种情况下该选项被完全忽略了。我不确定是什么导致了 OOME,但为什么 JVM 可以忽略退出选项?是否可以采取任何措施来确保 OOME 发生时应用程序确实退出?
看起来是 known JVM issue。貌似还没有修好。
当无法分配内存或创建新的本机线程时,您可以使用 jvmkill JVMTI 代理终止 JVM。
我在这个 Java 版本下有一个 Java 应用程序 运行:
openjdk version "1.8.0_162"
OpenJDK Runtime Environment (build 1.8.0_162-8u162-b12-1~deb9u1-b12)
OpenJDK 64-Bit Server VM (build 25.162-b12, mixed mode)
并且我在命令行上指定了选项 -XX:+ExitOnOutOfMemoryError
。但是最近我遇到了 OOME 场景,我在日志中看到了 OOME:
java.lang.OutOfMemoryError: unable to create new native thread
,但应用程序愉快地继续工作,没有退出。看起来在这种情况下该选项被完全忽略了。我不确定是什么导致了 OOME,但为什么 JVM 可以忽略退出选项?是否可以采取任何措施来确保 OOME 发生时应用程序确实退出?
看起来是 known JVM issue。貌似还没有修好。
当无法分配内存或创建新的本机线程时,您可以使用 jvmkill JVMTI 代理终止 JVM。