RFR: 8335126: Shenandoah: Improve OOM handling
Kelvin Nilsen
kdnilsen at openjdk.org
Wed Jun 26 17:59:17 UTC 2024
1. Throw OOM after failed allocation request following a Full GC (rather
than retrying as long as Full GC makes good progress because
repeatedly retrying the allocation request creates brown-out behavior
with no identified benefits on real-world workloads)
2. Count a successful allocation following a blocking
handle_allocation_failure() request to be good GC progress.
Otherwise, we increment gc_no_progress_count in full GCs that
have bad progress but successful allocations, and this causes
unwanted failure to even try a full GC in a different thread after
an out-of-memory condition might have been resolved in this thread.
3. Count a completed concurrent GC cycle as good progress, regardless
of how much memory it might have been able to reclaim. The fact that
concurrent GC succeeded without allocation failure and without
degeneration is considered good progress. Successful concurrent
GCs between Full GCs will reset the gc_no_progress_count to zero.
4. Do not count degenerated cycles as having no-progress. If a
degenerated cycle has no progress, it will upgrade to full GC.
The upgraded full GC will evaluate its own progress. We don't
want to count this "same [upgraded] cycle" twice.
These changes have been tested over a variety of workloads and standard tests. These changes have also been tested with the generational mode of Shenandoah. It appears these changes provide more robust and consistent handling across a diversity of scenarios than the original implementation.
-------------
Commit messages:
- Improve OOM handling
- Merge branch 'openjdk:master' into master
- Revert "Make GC logging less verbose"
- Make GC logging less verbose
- Merge branch 'openjdk:master' into master
- Merge branch 'openjdk:master' into master
- Merge branch 'openjdk:master' into master
- Merge branch 'openjdk:master' into master
- Merge branch 'openjdk:master' into master
- Merge branch 'openjdk:master' into master
- ... and 10 more: https://git.openjdk.org/jdk/compare/c66f785f...439d394c
Changes: https://git.openjdk.org/jdk/pull/19912/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19912&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8335126
Stats: 47 lines in 3 files changed: 27 ins; 1 del; 19 mod
Patch: https://git.openjdk.org/jdk/pull/19912.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/19912/head:pull/19912
PR: https://git.openjdk.org/jdk/pull/19912
More information about the shenandoah-dev
mailing list