Skip to content

Commit 0359a7b

Browse files
committed
Modified understanding how to override JVM max heap size section
1 parent 9b9008a commit 0359a7b

File tree

1 file changed

+9
-19
lines changed

1 file changed

+9
-19
lines changed

modules/nodes-cluster-resource-configure-jdk.adoc

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,29 +29,19 @@ this documentation, and may involve setting multiple additional JVM options.
2929
== Understanding how to override the JVM maximum heap size
3030

3131
For many Java workloads, the JVM heap is the largest single consumer of memory.
32-
Currently, the OpenJDK defaults to allowing up to 1/4 (1/`-XX:MaxRAMFraction`)
33-
of the compute node's memory to be used for the heap, regardless of whether the
34-
OpenJDK is running in a container or not. It is therefore *essential* to
35-
override this behavior, especially if a container memory limit is also set.
3632

37-
There are at least two ways the above can be achieved:
33+
Currently, on bare metal or VM setups, the OpenJDK's default heap value is 25%, 1/4th of the compute node’s memory. However, within containers using cgroups detection (v1 and v2 for JDK 11/17), Xmx was set as 50% of the max memory resource limits by default. In ubi9 - RHEL 9 images, the default allocation is 80%(set via -XX:MaxRAMPercentage), leaving 20% for native use. It is therefore essential to
34+
override this behavior, especially if a container memory limit is also set.
3835

39-
* If the container memory limit is set and the experimental options are
40-
supported by the JVM, set `-XX:+UnlockExperimentalVMOptions
41-
-XX:+UseCGroupMemoryLimitForHeap`.
42-
+
43-
[NOTE]
36+
[IMPORTANT]
4437
====
45-
The `UseCGroupMemoryLimitForHeap` option has been removed in JDK 11. Use `-XX:+UseContainerSupport` instead.
38+
The `UseContainerSupport` flag is enabled by default in the JVM. It helps the JVM recognize Docker container operations by fetching the container details like CPU count and total memory. Therefore, it is not necessary to manually define `JAVA_MAX_INITIAL_MEM`, as the JVM obtains maximum memory allocation from the pods directly.
4639
====
47-
+
48-
This sets `-XX:MaxRAM` to the container memory limit, and the maximum heap size
49-
(`-XX:MaxHeapSize` / `-Xmx`) to 1/`-XX:MaxRAMFraction` (1/4 by default).
50-
51-
* Directly override one of `-XX:MaxRAM`, `-XX:MaxHeapSize` or `-Xmx`.
52-
+
53-
This option involves hard-coding a value, but has the advantage of allowing a
54-
safety margin to be calculated.
40+
41+
To achieve this, directly override one of `-XX:MaxRAM`, `-XX:MaxHeapSize` or `MaxRAMPercentage`.
42+
43+
Because you must provide a specific value, this option helps to calculate a safety margin.
44+
5545

5646
[id="nodes-cluster-resource-configure-jdk-unused_{context}"]
5747
== Understanding how to encourage the JVM to release unused memory to the operating system

0 commit comments

Comments
 (0)