10

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
Weslor
  • 22,180
  • 2
  • 20
  • 31

1 Answers1

18

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
apangin
  • 92,924
  • 10
  • 193
  • 247
  • 2
    could you please add reference to https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html. Then I'll upvote :-P – Petro Semeniuk Apr 29 '16 at 00:00
  • That makes it hard to plan VMs to deploy JVM applications. Used to be setting mx, mss, permgen to specific values below the physical memory size, and you're safe. Now I have a few JVM that have mx of 12g, and yet their VSS is twice that size and exceeds the total memory available on the box - which is a disaster waiting to happen, methinks. – Vladimir Dyuzhev Jan 16 '19 at 14:41