I have the following host with the memory details:
$free -m
total used free shared buffers cached
Mem: 7872 7579 292 17 483 3983
-/+ buffers/cache: 3112 4759
Swap: 2047 14 2033
I have a java app running with the params -Xms200m -Xmx200m, could someone please explain me why the VCZ is 3800076 and the RSS is 241304 (which is more of the Java params)
from the ps -aux command:
66345 6773 0.2 2.9 3800076 241304 ? Sl Apr1 12:06 /apps/myapps/myapp1/java/bin/java -Xms200m -Xmx200m
解决方案
Memory used by Java process (as seen by the OS) is not only limited to Java Heap. There are a lot more memory areas that should be also counted:
Metaspace (where class metadata resides);
Code Cache (storage for JIT-compiled methods and all the generated code);
Direct ByteBuffers;
Memory-mapped files, including files mapped by JVM, e.g. all JAR files on the classpath;
Thread stacks;
JVM code itself and all the dynamic libraries loaded by Java Runtime;
Other internal JVM structures.
Use NativeMemoryTracking JDK feature to get the detailed breakdown of memory areas used by JVM:
java -XX:NativeMemoryTracking=detail -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics