You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

容器环境下Java17遇OOME退出时如何生成JFR文件?

解决JVM因OOME退出时无法生成JFR文件的问题

-XX:+ExitOnOutOfMemoryError会让JVM在触发OOME时直接终止进程,跳过了正常退出流程里的JFR dump步骤,所以默认配置下不会生成JFR文件。可以通过以下两种方式实现需求:

  • 替换退出参数为-XX:+CrashOnOutOfMemoryError
    这个参数会让JVM在OOME时崩溃而非直接退出,崩溃过程会触发JFR的dump逻辑,生成指定的JFR文件。调整后的启动参数示例:

    java -XX:+CrashOnOutOfMemoryError -XX:StartFlightRecording:dumponexit=true app.jar
    
  • 自定义OOME异常钩子配合JFR API
    如果必须保留ExitOnOutOfMemoryError,可以在代码中添加未捕获异常处理器,在OOME发生时主动调用JFR的dump方法,再触发JVM退出。示例代码:

    Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> {
        if (throwable instanceof OutOfMemoryError) {
            try {
                // 指定JFR文件输出路径,按需调整
                jdk.jfr.Recording.dump(java.nio.file.Paths.get("./oome-dump.jfr"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.exit(1);
        }
    });
    

    注意要确保JFR已正常启动,且容器进程对指定的输出路径有写入权限。

容器环境下额外注意:要确认JFR文件的输出路径在容器内有足够权限写入,避免因权限不足导致dump失败。

内容的提问来源于stack exchange,提问作者YutaSaito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:35:35