PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was bedeutet eigentlich VIRT, RES, SHR?


rotalever
2008-07-07, 00:38:47
Wenn ich top starte, kommt da so ne Liste:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 15 0 1484 528 464 S 0.0 0.0 0:01.09 init
20235 syslog 15 0 1696 652 516 S 0.0 0.0 0:02.68 syslogd
20313 root 16 0 2056 860 708 S 0.0 0.0 0:00.42 cron
23928 www-data 22 0 31496 4368 3012 S 0.0 0.1 0:00.04 php5-cgi

VIRT, RES und SHR sind ja wohl irgendwelche Speicherverbrauchsangaben. Aber was bedeuten sie eigentlich genau? Schließlich verbraucht ein Programm zu jedem Zeitpunkt eine ganz bestimmte Menge Speicher, wozu brauche ich dann drei Größen? Und warum ist VIRT immer so groß, wie zum Beispiel bei php auf 31496 (kbyte?)

Gnafoo
2008-07-07, 00:55:26
Das könnte dir schonmal etwas weiterhelfen. Weiter unten sind die Angaben erklärt:
http://unixhelp.ed.ac.uk/CGI/man-cgi?top

(Bzw. "man top" eben)

rotalever
2008-07-07, 01:14:49
Da hätte ich irgendwie auch selber drauf kommen können :redface:

Aber 100% Schlau bin ich leider immer noch nicht. Zum Beispiel beim VIRT soll "code, data and shared libraries" enthalten sein. Zwei Instanzen von PHP benutzen ja wohl die gleichen Shared libraries? Es wird also durch das starten von weiteren Prozessen, kein weiterer Shared-Library Platz im RAM verbraucht, aber er wird trotzdem für jeden Prozess einzeln aufgeführt?

Gnafoo
2008-07-07, 02:37:38
So würde ich es zumindest vermuten. Deshalb ja auch die restlichen Angaben. Leider kann man den tatsächlichen Speicherverbrauch für das Programm wegen der Shared-Memory-Problematik nicht so ohne weiteres angeben.

Gast
2008-07-07, 06:43:36
Man kann ja zB. mit mmap() auch Dateien als Pointer ansprechen bzw. eben wie normalen RAM und das ganze zählt dann natürlich auch zur virtuellen RAM Größe dazu, aber extra RAM wird dabei überhaupt nicht verbraucht.
Die Datei kann natürlich im File Cache liegen und dann darüber eingelesen werden statt direkt über Platte, aber der File Cache wird ja extra aufgeführt weil der halt eben auch sofort vom Kernel freigeben werden kann wenn ein Programm den RAM braucht.

puntarenas
2008-07-07, 11:09:03
Hey, da war doch mal was. Ich habe vor Jahren mal mein gesammeltes Laienhalbwissen genommen und mithilfe von Google und auf Grundlage eines bestehenden Artikels einen Wiki-Artikel gebastelt:

Die Unterschiede zwischen VIRT, RES und SHR in top

*

VIRT steht für die virtuelle Größe eines Prozesses und ist die Summe seines aktuell belegten Speichers, von Speicher, den der Prozess in seinen Speicherbereich eingeblendet hat (beispielsweise Grafikkartenspeicher für den X-Server), von Dateien auf der Festplatte, die der Prozess eingeblendet hat (besonders "Shared Libraries") und von Speicher der mit anderen Prozessen geteilt wird. VIRT steht somit für die Speichermenge, auf die ein Programm momentan Zugriff hat.
*

RES steht für "Resident Size" und damit für genau die Menge an physichem Speicher, die momentan von einem Prozess belegt wird. Hieraus ergibt sich auch die im Bezug auf den verfügbaren Speicher angegebene prozentuale Speichernutzung in der %MEM-Spalte. Dieser Wert wird praktisch immer niedriger sein als der virtuelle Speicherverbrauch eines Prozesses (VIRT), da die meisten Programme zumindest von der C-Library abhängen.
*

SHR schließlich besagt, wieviel des virtuell belegten Speichers (VIRT) "shareable" ist, also mit anderen Prozessen geteilt werden kann. Benutzt ein Prozess beispielsweise eine bestimmte Library, so heißt dies nicht zwangsläufig, daß sich auch die gesamte Bibliothek tatsächlich im Speicher befindet. Verwendet der Prozess nur einige Funktionen der Bibliothek, so wird zwar die gesamte Bibliothek als Datei auf der Festplatte eingeblendet und sowohl unter VIRT, als auch unter SHR mitgerechnet, aber nur die Teile der Library, aus denen auch Funktionen benutzt werden, befinden sich wirklich im Speicher und zählen somit unter RES.

Quelle: Linux Speichermanagement (http://wiki.debianforum.de/LinuxSpeichermanagement)

So würde ich es zumindest vermuten. Deshalb ja auch die restlichen Angaben. Leider kann man den tatsächlichen Speicherverbrauch für das Programm wegen der Shared-Memory-Problematik nicht so ohne weiteres angeben.
Dazu gibt es auch einen Abschnitt über die Verwendung von pmap. :)

rotalever
2008-07-07, 13:11:53
Danke für den Artikel, werd ich mal lesen.

Xanthomryr
2008-07-09, 16:55:11
Nur so nebenbei, ich empfehle die Installation von htop.

http://htop.sourceforge.net/