Wie viel Speicher verbraucht dieser Java-Prozess? Die Ergebnisse von pmap und top stehen im Konflikt

Wie viel Speicher verbraucht dieser Java-Prozess? Die Ergebnisse von pmap und top stehen im Konflikt

Ich möchte nur die genaue Speichermenge wissen, die ein Prozess verbraucht.

pgrep java -l
21786 java

Der Gesamtspeicher, den ich habe, beträgt 1 GB:

[root@home tmp]# free -m
             total       used       free     shared    buffers     cached
Mem:          1024        952         71          0          0          0
-/+ buffers/cache:        952         71
Swap:            0          0          0

Java verwendet 413588 KB, das sind mehr als 40 % des von Java genutzten Speichers

pmap 21786

......

b7fc2000      4K r-x--  /usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
b7fc3000      4K rwx--    [ anon ]
b7fc4000      4K r-x--    [ anon ]
b7fc5000    108K r-x--  /lib/ld-2.5.so
b7fe0000      4K r-x--  /lib/ld-2.5.so
b7fe1000      4K rwx--  /lib/ld-2.5.so
bf85b000     84K rwx--    [ stack ]
 total   413588K




top - 23:40:54 up 22 days,  6:17,  5 users,  load average: 0.02, 0.04, 0.03
Tasks: 100 total,   2 running,  98 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.7%us,  1.3%sy,  0.0%ni, 97.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1048800k total,   975180k used,    73620k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
21786 mirror    19   0  403m 102m 8712 S  0.3 10.0   0:10.52 java   

Warum wird als oberstes Ergebnis angezeigt, dass nur 10 % des Speichers vom Java-Prozess genutzt werden?

Das Ergebnis von top und pmap ist also widersprüchlich, das erste zeigt an, dass mehr als 40 % des Systemspeichers vom Java-Prozess verwendet werden, aber das Ergebnis von oben zeigt an, dass nur 10 % des Speichers vom Java-Prozess verwendet werden.

Was ist richtig?

Wie kann man die genaue Speichermenge ermitteln, die von einem Prozess verwendet wird?

Antwort1

Sie verwechseln virtuellen und physischen Speicher.

pmap meldet Statistiken zum virtuellen Speicher (413588 KB verwendet), die der obersten VIRT-Spalte (403 m) entsprechen. Dies schließt Daten ein, die mit anderen Prozessen und anderen auf der Festplatte gespeicherten Seiten geteilt werden.

Wird verwendet pmap -x, um Statistiken zur RAM-Nutzung abzurufen (RSS-Spalte).

Die aktuelle RAM-Nutzung des Java-Prozesses wird in der topSpalte „RES“ angegeben (103 MB).

verwandte Informationen