it-swarm.com.de

Was bedeutet die Größe des virtuellen Speichers oben?

Ich führe top aus, um die Leistung meines Servers zu überwachen, und 2 meiner Java -Prozesse zeigen einen virtuellen Speicher von bis zu 800 MB-1 GB. Ist das eine schlechte Sache?

Was bedeutet virtueller Speicher?

Und übrigens, ich habe einen Swap von 1 GB und es werden 0% verwendet. Ich bin also verwirrt.

Java-Prozess = 1 Tomcat-Server + mein eigener Java Daemon Server = Ubuntu 9.10 (karmisch)

129
kapso

Virtueller Speicher ist nicht unbedingt Speicher. Wenn ein Prozess beispielsweise eine große Datei speicherabbildet, wird die Datei tatsächlich auf der Festplatte gespeichert, nimmt jedoch immer noch "Adressraum" im Prozess ein.

Der Adressraum (dh der virtuelle Speicher in der Prozessliste) kostet nichts. Es ist nicht real. Was echt ist, ist die RSS (RES) -Spalte, die residenter Speicher ist. So viel von Ihrem tatsächlichen Speicher belegt ein Prozess.

Aber auch das ist nicht die ganze Antwort. Wenn ein Prozess fork () aufruft, wird er in zwei Teile aufgeteilt, und beide teilen zunächst ihr gesamtes RSS. Selbst wenn RSS ursprünglich 1 GB betrug, würde das Ergebnis nach dem Verzweigen zwei Prozesse mit jeweils einem RSS von 1 GB sein, aber Sie würden immer noch nur 1 GB Speicher verwenden.

Noch verwirrt? Folgendes müssen Sie wirklich wissen: Verwenden Sie den Befehl free und überprüfen Sie die Ergebnisse vor und nach dem Starten Ihres Programms (auf dem +/- buffers/cache Linie). Dieser Unterschied besteht darin, wie viel ne Speicher Ihr neu gestartetes Programm verwendet hat.

147
apenwarr

Von der obersten (1) Manpage:

o: VIRT  --  Virtual Image (kb)
      The  total  amount  of  virtual  memory  used  by the task.  It
      includes all code, data and shared libraries  plus  pages  that
      have been swapped out.

      VIRT = SWAP + RES.

Wobei RES RESident-Speicher bedeutet (verwendeter physischer Speicher).

Eigentlich stimmt das (nicht mehr). Wenn "Swap" angezeigt wird, enthält dies auch Dateien, die das Programm seinem Adressraum zugeordnet hat, die möglicherweise tatsächlich real verbrauchen oder nicht. RAM noch. Dieser Speicher ist dateisicher, aber nicht vorhanden nicht wirklich tauschen.

VIRT enthält auch Seiten, die zugewiesen, aber noch für nichts verwendet wurden. Jede Seite in diesem Status wird der Kernel-Nullseite zugeordnet (brillantes Konzept - Sie sollten es nachschlagen), damit sie in VIRT angezeigt wird, aber keinen Speicher belegt.

24
amphetamachine

Ich fand das Erklärung von Mugurel Sumanari sehr klar:

VIRT steht für die virtuelle Größe eines Prozesses, dh die Summe des tatsächlich verwendeten Speichers, des Speichers, den er in sich selbst abgebildet hat (z. B. RAM für die Grafikkarte) X-Server), darauf zugeordnete Dateien auf der Festplatte (insbesondere gemeinsam genutzte Bibliotheken) und gemeinsam mit anderen Prozessen gemeinsam genutzter Speicher. VIRT gibt an, auf wie viel Speicher das Programm derzeit zugreifen kann.

RES steht für die residente Größe, die eine genaue Darstellung des tatsächlichen physischen Speichers eines Prozesses darstellt. (Dies entspricht auch direkt der Spalte% MEM.) Dies ist praktisch immer kleiner als die VIRT-Größe, da die meisten Programme von der C-Bibliothek abhängen.

SHR gibt an, wie viel von der VIRT-Größe tatsächlich gemeinsam genutzt werden kann (Speicher oder Bibliotheken). Bei Bibliotheken bedeutet dies nicht unbedingt, dass die gesamte Bibliothek ansässig ist. Wenn ein Programm beispielsweise nur wenige Funktionen in einer Bibliothek verwendet, wird die gesamte Bibliothek zugeordnet und in VIRT und SHR gezählt, aber nur die Teile der Bibliotheksdatei, die die verwendeten Funktionen enthalten, werden tatsächlich geladen und gezählt unter RES.

18

Die Spalte VIRT in der Ausgabe ps/top ist für die Messung der Speichernutzung nahezu irrelevant. Mach dir keine Sorgen. Apache Heavy Load VIRT vs RES Speicher

https://stackoverflow.com/questions/561245/virtual-memory-usage-from-Java-under-linux-too-much-memory-used

5
leonbloy

Die Spalte VIRtual oben bezieht sich auf den Superraum (Superverbrauchsraum) des Prozesses, den der Prozess zur Laufzeit möglicherweise nicht tatsächlich belegt. Es gibt eine weitere Spalte RESident, die sich auf den tatsächlichen physischen Speicher/Speicherplatz bezieht, der vom Prozess zur Laufzeit zugewiesen wird.

Der Grund für den Unterschied zwischen den beiden kann anhand des Beispiels verstanden werden: Wenn der Prozess eine bestimmte Bibliothek verwendet, hilft die Bibliotheksgröße auch dem virtual-size. Da jedoch nur ein Teil der Bibliothek verwendet werden würde (d. h. einige verwendete Methoden), hilft dies bei resident-size.

Siehe Weitere Informationen

2
parasrish

Linux unterstützt den virtuellen Speicher, dh die Verwendung einer Festplatte als Erweiterung von RAM), sodass die effektive Größe des verwendbaren Speichers entsprechend zunimmt. Der Kernel schreibt den Inhalt eines derzeit nicht verwendeten Speicherblocks in die Festplatte, damit der Speicher für einen anderen Zweck verwendet werden kann. Wenn der ursprüngliche Inhalt erneut benötigt wird, wird er in den Speicher zurückgelesen. Dies ist für den Benutzer vollständig transparent. Programme, die unter Linux ausgeführt werden, sehen nur die größere Speichermenge verfügbar und bemerken nicht, dass sich Teile von Zeit zu Zeit auf der Festplatte befinden. Natürlich ist das Lesen und Schreiben der Festplatte langsamer (in der Größenordnung von tausendmal langsamer) als die Verwendung von echtem Speicher, daher tun die Programme dies nicht. Der Teil der Festplatte, der als virtueller Speicher verwendet wird, wird als Swap Space bezeichnet.

Linux kann entweder eine normale Datei im Dateisystem oder eine separate Partition für den Swap Space verwenden. Eine Swap-Partition ist schneller, aber es ist einfacher, die Größe einer Swap-Datei zu ändern (es ist nicht erforderlich, die gesamte Festplatte neu zu partitionieren und möglicherweise alles von Grund auf neu zu installieren). Wenn Sie wissen, wie viel Swap-Speicherplatz Sie benötigen, sollten Sie sich für eine Swap-Partition entscheiden. Wenn Sie sich jedoch nicht sicher sind, können Sie zuerst eine Swap-Datei verwenden und das System eine Weile verwenden, damit Sie ein Gefühl dafür bekommen, wie viel Swap-Speicherplatz Sie benötigen brauchen, und machen Sie dann eine Swap-Partition, wenn Sie über ihre Größe sicher sind.

Sie sollten auch wissen, dass unter Linux mehrere Swap-Partitionen und/oder Swap-Dateien gleichzeitig verwendet werden können. Dies bedeutet, dass Sie, wenn Sie nur gelegentlich ungewöhnlich viel Swap-Speicherplatz benötigen, zu solchen Zeiten eine zusätzliche Swap-Datei einrichten können, anstatt den gesamten zugewiesenen Betrag ständig beizubehalten.

Ein Hinweis zur Terminologie des Betriebssystems: In der Informatik wird normalerweise zwischen Austauschen (Schreiben des gesamten Prozesses zum Austauschen des Speicherplatzes) und Paging (Schreiben von nur Teilen mit fester Größe, normalerweise jeweils einige Kilobyte) unterschieden. Paging ist normalerweise effizienter, und genau das macht Linux, aber in der traditionellen Linux-Terminologie wird ohnehin über das Austauschen gesprochen.

Quelle: http://www.faqs.org/docs/linux_admin/x1752.html

1
user42198

"VIRT" ist nur der Adressraum, RES ist der "echte" Speicher, aber die "SHR" (= gemeinsam genutzte) Menge von "RES" ist der Teil von RES, der mit anderen Prozessen geteilt wird. Daher glaube ich, dass Sie durch Subtrahieren von SHR von RES für die meisten Prozesse die Speichermenge erhalten, die wirklich auf diesen bestimmten Prozess zurückzuführen ist.

0
Max