Search code examples
tomcatmemoryjvmdebian

Tomcat server's JVM free memory not returned to OS


My tomcat server is behaving strange, it has allocated 6GB of memory from system, but more than 4GB is marked as "free".

This is a screen from tomcat server status:

I understand what "Free memory" in JVM means, but I do not understand why it is not returning lets say in this situation at least 3GB back to system.

Env:

  • Java 8
  • Tomcat 8
  • Debian 8.3
  • Total memory on machine: 64 GB

Solution

  • Since you haven't overridden any JVM options, Tomcat uses the default garbage collector which is ParallelGC in JDK 8.

    ParallelGC does not uncommit heap memory. Try -XX:+UseG1GC option. G1 garbage collector is capable of releasing memory back to the OS.

    See this article for more information.