RFR: 8364090: Dump JFR recording on CrashOnOutOfMemoryError [v4]
Yasumasa Suenaga
ysuenaga at openjdk.org
Wed Jul 30 05:16:42 UTC 2025
On Tue, 29 Jul 2025 20:33:43 GMT, Erik Gahlin <egahlin at openjdk.org> wrote:
>> I get the following failure when testing your change:
>>
>> `----------System.err:(15/955)----------
>> java.lang.RuntimeException: assertGreaterThan: expected 0 > 0
>> at jdk.test.lib.Asserts.fail(Asserts.java:715)
>> at jdk.test.lib.Asserts.assertGreaterThan(Asserts.java:403)
>> at jdk.test.lib.Asserts.assertGreaterThan(Asserts.java:386)
>> at jdk.jfr.event.oldobject.TestEmergencyDumpAtOOM.test(TestEmergencyDumpAtOOM.java:104)
>> at jdk.jfr.event.oldobject.TestEmergencyDumpAtOOM.main(TestEmergencyDumpAtOOM.java:109)
>> at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
>> at java.base/java.lang.reflect.Method.invoke(Method.java:565)
>> at com.sun.javatest.regtest.agent.MainWrapper$MainTask.run(MainWrapper.java:138)
>> at java.base/java.lang.Thread.run(Thread.java:1474)`
>>
>>
>> It is hard to guarantee a memory-leak sample. Other tests for OldObjectSample run in a loop until they succeed.
>>
>> In the test, you use path-to-gc-roots=true. Is that really needed?
>
> Using an EventStream might simplify the filtering, e.g.
>
> AtomicLong oldObjects = new AtomicLong();
> AtomicReference<String> reason = new AtomicReference<>();
> try (EventStream stream = EventStream.openFile(...)) {
> stream.onEvent("jdk.Shutdown", e -> reason.set(e.getString("reason")));
> stream.onEvent("jdk.OldObjectSample", e -> oldObjects.incrementAndGet());
> stream.start();
> }
> if (shouldCrash) {
> // validation
> }
I updated the test. I hope it works on your environment.
- Revise JVM option for the test process (`-Xmx` and `-XX:TLABSize` are copied from TestClassLoaderLeak.java)
- Use `EventStream` to check JFR events as Erik shown
- Repeat the test if `OldObjectSample` does not appear on the flight record
- Remove `var` from test code
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/26468#discussion_r2241548770
More information about the hotspot-jfr-dev
mailing list