JVM Parameters
Modify the java heap memory based on container memory using one of the following JVM parameters:
Parameter | Description |
---|---|
-XX:InitialRAMPercentage | The initial size of the heap based on the total container memory. |
-XX:MinRAMPercentage | The maximum heap size based on the size of the JVM running on small heap. The small is heap is of approximately 125MB. |
-XX:MaxRAMPercentage | The maximum heap size based on the size of the JVM running on greater than small heap. |
Displaying the Current Value
Use the following command the display the current value of the container aware JVM Parameters using the following:
docker container run -it --rm openjdk:17.0.2-slim java -XX:+PrintFlagsFinal -version | grep -E ".*RAMPercentage"
Expect to see something like the following:
double InitialRAMPercentage = 1.562500
{product} {default}
double MaxRAMPercentage = 25.000000
{product} {default}
double MinRAMPercentage = 50.000000
{product} {default}
Checking the Current Memory and CPU using JShell
-
Open a jshell in the container using the following:
docker container run -it --rm openjdk:17.0.2-slim jshell
-
Paste the following command in jshell:
var rt = Runtime.getRuntime(); System.out.printf("Heap size: %dMB%nMaximum size of heap: %dMB%nAvailable processors: %d%n", rt.totalMemory()/1024/1024, rt.maxMemory()/1024/1024, rt.availableProcessors());
-
Press enter.
Expect to see something similar to the following:
rt ==> java.lang.Runtime@1d81eb93 Heap size: 252MB Maximum size of heap: 3966MB Available processors: 16 $2 ==> java.io.PrintStream@34c45dca
-
Type the following in jshell and press enter.
/exit
Allocating a Memory and CPU to a Container
-
Execute the following command to allocate 100mb of memory and 1 CPU to the container:
docker container run -it --rm -m 100m --cpus=1 openjdk:17.0.2-slim jshell
-
Paste the following command in jshell:
var rt = Runtime.getRuntime(); System.out.printf("Heap size: %dMB%nMaximum size of heap: %dMB%nAvailable processors: %d%n", rt.totalMemory()/1024/1024, rt.maxMemory()/1024/1024, rt.availableProcessors());
-
Press enter.
Expect to see something similar to the following:
rt ==> java.lang.Runtime@6659c656 Heap size: 7MB Maximum size of heap: 48MB Available processors: 1 $2 ==> java.io.PrintStream@2d8e6db6
Notice the following:
Value Heap size 7MB Maximum size of heap 48MB Available processors 1 -
Type the following in jshell and press enter.
/exit
Modifying the Allocated Maximum Size of Heap Memory
-
Execute the following command to allocate 100mb of memory and 1 CPU to the container:
docker container run -it --rm -m 100m --cpus=1 openjdk:17.0.2-slim jshell -R-XX:MinRAMPercentage=80
-
Paste the following command in jshell:
var rt = Runtime.getRuntime(); System.out.printf("Heap size: %dMB%nMaximum size of heap: %dMB%nAvailable processors: %d%n", rt.totalMemory()/1024/1024, rt.maxMemory()/1024/1024, rt.availableProcessors());
-
Press enter.
Expect to see something similar to the following:
rt ==> java.lang.Runtime@6659c656 Heap size: 7MB Maximum size of heap: 77MB Available processors: 1 $2 ==> java.io.PrintStream@2d8e6db6
Notice the Maximum size of heap become 77MB. This is because of the JVM argument -XX:MinRAMPercentage=80 passed in jshell as:
-R-XX:MinRAMPercentage=80
We use the --XX:MinRAMPercentage=80 because the memory allocated is a small heap.
-
Type the following in jshell and press enter.
/exit
Recent Comments