RFR: 8364090: Dump JFR recording on CrashOnOutOfMemoryError

Yasumasa Suenaga ysuenaga at openjdk.org
Fri Jul 25 08:07:57 UTC 2025


On Fri, 25 Jul 2025 07:50:32 GMT, Erik Gahlin <egahlin at openjdk.org> wrote:

>> JFR emergency dump would happen when OOM was thrown. However it would not contain most recent `OldObjectSample` events emitted by LeakProfiler.
>> 
>> I [reported this issue in past](https://mail.openjdk.org/pipermail/hotspot-jfr-dev/2019-January/000381.html), and it seems to be difficult to fix soon, and also JDK codebase has been updated in several years. It brings us to fix this issue easier than past.
>> 
>> So I propose again to emit the events from LeakProfiler when OOM happened.
>> This change passed `jdk_jfr` tests on Linux x64 (excepts TestHeapSummaryEventPSParOld.java reported in [JDK-8364082](https://bugs.openjdk.org/browse/JDK-8364082))
>> 
>> Related email thread: https://mail.openjdk.org/pipermail/hotspot-jfr-dev/2025-July/008007.html
>
> src/hotspot/share/runtime/java.cpp line 466:
> 
>> 464:   }
>> 465: 
>> 466:   JFR_ONLY(Jfr::on_vm_shutdown(true, halt);)
> 
> You set oom to true here, why?

To keep current behavior.

Before this change, 1st argument of `on_vm_shutdown` is `exception_handler`. You can see it on this change. If `exception_handler` sets to `false`, emergency dump handles it as OOM:


static void post_events(bool exception_handler, Thread* thread) {
  if (exception_handler) {
    EventShutdown e;
    e.set_reason("VM Error");
    e.commit();
  } else {
    // OOM
    LeakProfiler::emit_events(max_jlong, false, false);
  }
  EventDumpReason event;
  event.set_reason(exception_handler ? "Crash" : "Out of Memory");
  event.set_recordingId(-1);
  event.commit();
}


I'm not sure this code would be called when OOM happens, but I think we need to keep this behavior in this change - this change focuses on working emergency dump with `CrashOnOutOfMemoryError`.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/26468#discussion_r2230449677


More information about the hotspot-jfr-dev mailing list