You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: modules/nodes-cluster-resource-configure-jdk.adoc
+5-15Lines changed: 5 additions & 15 deletions
Original file line number
Diff line number
Diff line change
@@ -29,26 +29,16 @@ this documentation, and may involve setting multiple additional JVM options.
29
29
== Understanding how to override the JVM maximum heap size
30
30
31
31
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.
36
-
37
-
There are at least two ways the above can be achieved:
38
32
39
-
* If the container memory limit is set and the experimental options are
40
-
supported by the JVM, set `-XX:+UnlockExperimentalVMOptions
41
-
-XX:+UseCGroupMemoryLimitForHeap`.
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.
42
35
+
43
-
[NOTE]
36
+
[IMPORTANT]
44
37
====
45
-
The `UseCGroupMemoryLimitForHeap` option has been removed in JDK 11. Use `-XX:+UseContainerSupport` instead.
38
+
The `UseContainerSupport` flag is on by default in the JVM. It helps the JVM recognize Docker container operations, automatically fetching container-specific 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.
46
39
====
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
40
51
-
* Directly override one of `-XX:MaxRAM`, `-XX:MaxHeapSize` or `-Xmx`.
41
+
To acheive this, directly override one of `-XX:MaxRAM`, `-XX:MaxHeapSize` or `MaxRAMPercentage`.
52
42
+
53
43
This option involves hard-coding a value, but has the advantage of allowing a
0 commit comments