RFR: 8278125: Some preallocated OOMEs are missing stack trace [v2]
David Holmes
dholmes at openjdk.java.net
Fri Dec 17 02:36:27 UTC 2021
On Fri, 3 Dec 2021 05:51:48 GMT, Yi Yang <yyang at openjdk.org> wrote:
>> Our customer found that the PreallocatedOutOfMemoryErrorCount is 4 by default. It ought to pre-allocate 4 OOMEs with stack trace, but in fact, no matter how many OOMEs are thrown, only 2 OOMEs have proper stack trace. This is because PreallocatedOutOfMemoryErrorCount is consumed multiple times:
>>
>> VM tries to allocate a huge object while Java heap is insufficient to accommodate, it goes to:
>>
>> https://github.com/openjdk/jdk/blob/b79554bb5cef14590d427543a40efbcc60c66548/src/hotspot/share/gc/shared/memAllocator.cpp#L115-L136
>>
>> Line 135(`Universe::out_of_memory_error_java_heap`->`Universe::gen_out_of_memory_error`) and line 136(`THROW_OOP_`->`Exceptions::_throw`->`Exceptions::count_out_of_memory_exceptions`->`Universe::out_of_memory_error_java_heap`->`Universe::gen_out_of_memory_error`) call `Universe::gen_out_of_memory_error` twice in a single OOM event, which leads this unexpected scenario. Proposed fix is to remove such call in `Exceptions::count_out_of_memory_exceptions`.
>>
>> Thanks.
>
> Yi Yang has updated the pull request incrementally with one additional commit since the last revision:
>
> Universe::is_out_of_memory_xx
test/hotspot/jtreg/runtime/ErrorHandling/GenOutOfMemoryError.java line 60:
> 58: Asserts.assertTrue(4/*PreallocatedOutOfMemoryErrorCount is default to 4*/ == OOME_HAS_STACK_CNT, "Some OOMEs do not have stacktraces");
> 59: }
> 60: }
You need a newline at the end of the file
-------------
PR: https://git.openjdk.java.net/jdk/pull/6672
More information about the hotspot-runtime-dev
mailing list