Mein Ubuntu verbraucht mehr Speicher, als der Task-Manager anzeigt:
sudo ps -e --format rss | awk 'BEGIN{c=0} {c+=$1} END{print c/1024}'
2750.29
free -m
total used free shared buffers cached
Mem: 3860 2765 1094 0 3 300
-/+ buffers/cache: 2461 1398
Swap: 2729 2374 354
Das ist seltsam. Kann jemand diesen Unterschied erklären?
Was aber noch wichtiger ist: Ich möchte wissen, wie viel Speicher ein Prozess wirklich verbraucht. Ich möchte nicht die Größe des virtuellen Speichers kennen, sondern den residenten Speicher plus den Swap eines Prozesses.
Ich habe auch versucht, das Format param "sz" von 'ps' auszugeben, aber die Summe davon ist zu hoch (16000 MB) (param 'size' ergibt 36700 MB). Gibt es noch andere Möglichkeiten?
Ich möchte das wirklich nutzen, um zu bestimmen, welche Programme / Prozesse zu viel Speicher verbrauchen (und tauschen), um sie zu töten, weil Speicher wertvoll ist :-) Das ergibt einfach keinen Sinn, also frage ich hier.
Ausgabe von / proc / meminfo:
MemTotal: 3952812 kB
MemFree: 1119192 kB
Buffers: 2676 kB
Cached: 290068 kB
SwapCached: 160980 kB
Active: 1805396 kB
Inactive: 731680 kB
Active(anon): 1745820 kB
Inactive(anon): 689184 kB
Active(file): 59576 kB
Inactive(file): 42496 kB
Unevictable: 148 kB
Mlocked: 148 kB
SwapTotal: 2795272 kB
SwapFree: 390900 kB
Dirty: 1984 kB
Writeback: 0 kB
AnonPages: 2085472 kB
Mapped: 67432 kB
Shmem: 190676 kB
Slab: 88012 kB
SReclaimable: 42704 kB
SUnreclaim: 45308 kB
KernelStack: 5496 kB
PageTables: 87860 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 4771676 kB
Committed_AS: 9522364 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 374404 kB
VmallocChunk: 34359330144 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 61440 kB
DirectMap2M: 4030464 kB
Antworten:
Das Linux Virtual Memory System ist nicht ganz so einfach. Sie können nicht einfach alle RSS-Felder addieren und den Wert
used
von erhaltenfree
. Es gibt viele Gründe dafür, aber ich werde ein paar der größten treffen.Wenn sich ein Prozess teilt, werden sowohl das übergeordnete als auch das untergeordnete Element mit demselben RSS angezeigt. Allerdings setzt Linux
copy-on-write
so ein, dass beide Prozesse tatsächlich den gleichen Speicher belegen. Nur wenn einer der Prozesse den Speicher ändert, wird er tatsächlich dupliziert. Dies führt also dazu, dass diefree
Zahl kleiner als dietop
RSS-Summe ist.Der RSS-Wert enthält keinen gemeinsamen Speicher. Da Shared Memory keinem Prozess gehört, wird
top
es nicht in RSS aufgenommen. Dies führt also dazu, dass diefree
Anzahl größer als dietop
RSS-Summe ist.quelle
Ich denke, Sie sind besser dran, der Ausgabe von "free" zu vertrauen, was Ihre gesamte Speichernutzung angeht, und "ps" zu vertrauen, um eine allgemeine Vorstellung davon zu erhalten, wie viel Speicher ein einzelner Prozess verwendet.
Nur weil die Summe der RSS-Werte "ps" nicht gleich "free" ist, können Sie Ihre Prozesse nicht nach RSS sortieren und die größten für das Beenden auswerten.
Wenn Sie sich jedoch nur darum bemühen, sicherzustellen, dass der Computer in den Ruhezustand versetzt werden kann, ist es wahrscheinlich einfacher, mehr Auslagerungsdateien (ggf. in Form einer Datei auf der Festplatte) zu erstellen.
quelle
Ich habe endlich die Antwort auf meine Frage bekommen. Es gibt ein Programm namens smem (unter Ubuntu / Debian
apt install smem
), mit dem Sie Swap und belegten Speicher getrennt auflisten können.Einige verschiedene Möglichkeiten, Swap aufzulisten, finden Sie hier: https://www.cyberciti.biz/faq/linux-which-process-is-using-swap/ .
quelle