Mit ps kann ich die Größe, die vsize (wie oben VIRT?) Und die rss (wie oben RES?) Sehen. (Ein weiteres, das ich oben sehe, ist SHR.)
Könnte jemand für mich zusammenfassen, was diese verschiedenen Bereiche bedeuten?
Mit ps kann ich die Größe, die vsize (wie oben VIRT?) Und die rss (wie oben RES?) Sehen. (Ein weiteres, das ich oben sehe, ist SHR.)
Könnte jemand für mich zusammenfassen, was diese verschiedenen Bereiche bedeuten?
Antworten:
Zusamenfassend:
Virtuelle Größe: Der Adressraum, den ein Prozess verwaltet. Der virtuelle Adressraum enthält alles, auf das der Prozess über Zeiger (Speicheradressreferenzen) zugreifen kann. Wenn Ihr Programm beispielsweise Zugriff auf den Framebuffer Ihrer Grafikkarte erhält, wird dieser Speicher dem virtuellen Prozessraum zugeordnet und erhält eine Adresse, die auf einem Zeiger gespeichert ist. Speicherzuordnungsdateien und anonyme Zuordnungen werden ebenfalls in der Größe des virtuellen Adressraums berücksichtigt. So ziemlich alles ist in der virtuellen Größe. Wenn Sie die Größe aller in aufgelisteten Adressbereiche zusammenfassen /proc/<pid>/maps
, sollte dies ungefähr den gleichen Wert der virtuellen Größe ergeben.
Residente Größe: Die Größe des Arbeitsspeichers, die speziell zu dem Prozess gehört, der sich derzeit im Arbeitsspeicher befindet. Das heißt, die Menge an Speicher, die nicht in Swap ist. Beachten Sie, dass sich Teile des Prozesses im Auslagerungsspeicher befinden können, auch wenn der Prozess ausgeführt wird. Das Betriebssystem ruft diese Regionen aus dem Swap ab, wenn der Prozess versucht, darauf zuzugreifen. Dies sollte den Heap, die Stapel aller Threads und andere private Zuordnungen einschließen. Wenn man sich in /proc/<pid>/maps
den [stack]
, [heap]
und anderen anonymen Zuordnungen (die ohne Dateipfade) sind entweder ausgelagert oder in der Wohn Größe berücksichtigt.
Geteilte Größe: ist die Speichermenge, die zu mehreren Prozessen gehören kann. Wenn Sie beispielsweise vier Instanzen derselben Anwendung im Speicher haben, haben Sie vier Instanzen des Heapspeichers und mindestens vier Stapel, einen für jeden Prozess (dies ist der residente Speicher), aber Sie haben nur eine Instanz von der Binärcode des Programms und seiner Bibliotheken. Dies ist der gemeinsame Raum. Es enthält nicht nur den Programm-Binärcode und seine Bibliotheken, sondern auch Lokalisierungsdateien, schreibgeschützte Programmdaten, gemeinsam genutzte SysV- und POSIX-Speichersegmente, Semaphoren usw. Wenn Sie nachsehen /proc/<pid>/maps
, sind die meisten Zuordnungen an Bibliotheks- und Programmdateien gebunden geteilt.
Beachten Sie, dass VIRT die Vereinigung von RSS und SHR enthält und immer größer als eine von ihnen ist. Möglicherweise werden Regionen sowohl als RSS als auch als SHR ausgewiesen.
In Juliano Antwort:
Beachten Sie, dass RSS + SHR <= VIRT immer ist.
Das ist einfach falsch. SHR enthält den gesamten virtuellen Speicher, der mit anderen Prozessen gemeinsam genutzt werden kann, und RSS enthält den gesamten Arbeitsspeicher im RAM, der vom Prozess verwendet wird.
Somit wird der gesamte gemeinsam genutzte Speicher im RAM sowohl in SHR als auch in RSS gezählt, sodass SHR + RSS keine Bedeutung hat, da er Dublettenzählungen enthalten kann.
Um einen Prozess mit RSS + SHR> VIRT zu erstellen, müssen Sie nur eine große Datei (1 GB) mappen und dann vollständig lesen: Die mappierte Datei wird in den Arbeitsspeicher geladen, und VIRT, SHR und RSS sind jeweils etwas größer als 1 GB, also SHR + RSS> VIRT.