
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 top
Spalte „RES“ angegeben (103 MB).