2

It was my understanding that as of JDK12 the old experimental flag -XX:+UseCGroupMemoryLimitForHeap was removed but going to be baseline e.g. all JDK12 apps would read cgroup memory and set that as -Xms and -Xmx internally by default. However when I ran -XX:+PrintFlagsFinal with no -Xmx specified it showed I had only 512MB of memory for MaxHeap in a container with a limit of 2GB of memory allocated.

Did I miss something and the community decided to remove the -XX:+UseCGroupMemoryLimitForHeap flag with no intention of supporting behavior?

Karol Dowbecki
  • 43,645
  • 9
  • 78
  • 111
Jordan Shaw
  • 539
  • 4
  • 9

1 Answers1

3

This is correct. Java 12 respects cgroup RAM limit (2GB) and ignores the total RAM available on the host (which is larger than 2GB). Since -Xmx wasn't specified the default JVM behavior is to use 25% of available RAM and you end up with 512 MB heap. In practice -Xmx is a specific value which overrides -XX:+UseCGroupMemoryLimitForHeap and other flags governing dynamic heap sizing.

Assuming you don't want to specify -Xmx directly you most likely want to use -XX:MaxRAMFraction=1 which will make the JVM use 100% of the available RAM. Do note that under load it may kill the container.

Karol Dowbecki
  • 43,645
  • 9
  • 78
  • 111