Frage Top - Was bedeutet virtuelle Speichergröße? ... Linux / Ubuntu


ich renne top um meine Serverleistung zu überwachen und 2 meiner Java-Prozesse zeigen einen virtuellen Speicher von bis zu 800MB-1GB. Ist das etwas schlechtes?

Was bedeutet virtueller Speicher?

Und oh btw, ich habe 1GB tauschen und es zeigt 0% verwendet. Also bin ich verwirrt.

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


99
2018-05-04 15:37


Ursprung


Sehen: serverfault.com/questions/48582/ ... - Juliano


Antworten:


Virtueller Speicher ist nicht unbedingt Speicher. Wenn beispielsweise ein Prozessspeicher eine große Datei abbildet, wird die Datei tatsächlich auf der Festplatte gespeichert, beansprucht jedoch weiterhin "Adressraum".

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

Aber selbst das ist nicht die ganze Antwort. Wenn ein Prozess fork () aufruft, teilt er sich in zwei Teile, und beide teilen zunächst alle ihre RSS. Selbst wenn RSS anfangs 1 GB wäre, wäre das Ergebnis nach Forking zwei Prozesse mit jeweils einem RSS von 1 GB, aber Sie würden immer noch nur 1 GB Speicher verwenden.

Verwirrt noch? Hier ist, was Sie wirklich wissen müssen: Verwenden Sie die free Befehl und überprüfen Sie die Ergebnisse vor und nach dem Start Ihres Programms (auf der +/- buffers/cache Linie). Dieser Unterschied ist wie viel Neu Speicher dein neu gestartetes Programm verwendet.


119
2018-05-05 01:17



"Überprüfen Sie die Ergebnisse vor und nach dem Start Ihres Programms", alternativ verwenden Sie USS (Unique Set Size) als Rückgabewert smem. - Hubert Kario
Gibt es also ein Tool, das die wahre Menge an Speicher angibt, die nicht von Dritten verwendet werden? - CMCDragonkai
@ CMCDragonkai Ja, kostenlos. - deviantfan
Wenn ich einen Java-Prozess über starte java -Xmx16g RunLong, die 16 GB Speicher für den Java - Prozess reserviert, dann in VIRT von oben scheint es, dass die 16 GB gezählt werden. In diesem Fall, was ist der Typ dieses 16 GB Speicher, ist das zugeordnete Speicher oder ..? - Eric Wang


Von oben (1) man-Seite:

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 physikalischer Speicher).

Eigentlich stimmt das nicht (mehr). Wenn es "swap" sagt, schließt das auch Dateien ein, die das Programm in seinen Adressraum abgebildet hat, die tatsächlich noch echten RAM verbrauchen können. Dieser Speicher ist dateiunterstützt, wird aber nicht wirklich ausgetauscht.

VIRT enthält auch Seiten, die bereits zugewiesen, aber noch nicht verwendet wurden. Jede Seite in diesem Zustand ist dem Kernel Zero Page zugeordnet (brillantes Konzept - Sie sollten es nachschlagen), so dass es in VIRT angezeigt wird, aber tatsächlich keinen Speicher verbraucht.


22
2018-05-04 15:43



Nun, das ist interessant, also ist VIRT = SWAP + RES, wie kommt es, dass meine SWAP-Nutzung gleich null ist, während der virtuelle Speicher für die 2 Java-Prozesse in der Nähe eines 1 GB liegt? - kapso
im Grunde Top-Shows .... Swap: 1048568k insgesamt, 0k verwendet, 1048568k kostenlos, 505728k im Cache - kapso
@ user42159 Diese Antwort ist falsch! Es gibt KEINE "VIRT = SWAP + RES" in Mannspitze! -m : VIRT/USED toggle Reports USED (sum of process rss and swap total count) instead of VIRT. Es ist schade, dass ich diese Antwort nicht ablehnen kann. - duleshi
Diese Antwort ist falsch. USED ​​= Res + Swap Size (vom oberen Feld Management, Zugriff durch Drücken der Taste f, wenn oben. Auch von der oberen Manpage). - Jason S


ich habe das gefunden Erklärung von Mugurel Sumanariu sehr deutlich:

VIRT steht für die virtuelle Größe eines Prozesses, der die Summe von   Speicher, den es tatsächlich benutzt, Speicher, den es in sich selbst abgebildet hat (z   Instanz der Grafikkarte RAM für den X-Server), Dateien auf der Festplatte, die   wurden in ihm (vor allem Shared Libraries) und Speicher zugeordnet   mit anderen Prozessen geteilt. VIRT steht für wie viel Speicher der   Das Programm kann momentan zugreifen.

RES steht für die Bewohnergröße, die eine genaue Darstellung darstellt   wie viel tatsächlicher physischer Speicher ein Prozess verbraucht. (Das auch   entspricht direkt der Spalte% MEM.) Dies wird praktisch immer der Fall sein   kleiner sein als die VIRT-Größe, da die meisten Programme von C abhängen   Bibliothek.

SHR gibt an, wie viel von der VIRT-Größe tatsächlich gemeinsam genutzt werden kann (Speicher)   oder Bibliotheken). Im Fall von Bibliotheken heißt das nicht unbedingt   dass die gesamte Bibliothek resident ist. Zum Beispiel, wenn nur ein Programm   verwendet einige Funktionen in einer Bibliothek, die gesamte Bibliothek ist zugeordnet und   wird in VIRT und SHR gezählt, aber nur die Teile der Bibliothek   Datei mit den verwendeten Funktionen wird tatsächlich geladen   und unter RES gezählt werden.


8
2018-01-27 17:53





Die VIRT-Spalte in der ps / top-Ausgabe ist für die Messung der Speicherauslastung nahezu irrelevant. Mach dir keine Sorgen darüber. Apache Schwerlast VIRT vs RES-Speicher

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


5
2018-05-04 15:41



Danke, ich bin besorgt und verwirrt, weil die Swap-Nutzung 0% beträgt, die Spalte für den virtuellen Speicher ist sehr hoch. Und ich habe auch nur 1,7 GB des gesamten 2,7 GB physischen Speichers verwendet, während der virtuelle Speicher hoch ist? - kapso


Linux unterstützt virtuellen Speicher, dh eine Platte als Erweiterung des RAM, so dass die effektive Größe des nutzbaren Speichers entsprechend wächst. Der Kernel schreibt den Inhalt eines momentan unbenutzten Speicherblocks auf die Festplatte, so dass der Speicher für einen anderen Zweck verwendet werden kann. Wenn der ursprüngliche Inhalt erneut benötigt wird, werden sie in den Speicher zurückgelesen. Dies wird für den Benutzer vollständig transparent gemacht. Programme, die unter Linux laufen, sehen nur die größere Menge an verfügbarem Speicher und bemerken nicht, dass sich Teile von ihnen von Zeit zu Zeit auf der Platte befinden. Natürlich ist das Lesen und Schreiben der Festplatte langsamer (in der Größenordnung von tausend Mal langsamer) als die Verwendung von echtem Speicher, so dass die Programme nicht so schnell laufen. Der Teil der Festplatte, der als virtueller Speicher verwendet wird, wird als Auslagerungsspeicher bezeichnet.

Linux kann entweder eine normale Datei im Dateisystem oder eine separate Partition für Auslagerungsspeicher verwenden. Eine Swap-Partition ist schneller, aber es ist einfacher, die Größe einer Auslagerungsdatei zu ändern (es ist nicht notwendig, 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 eine Swap-Partition wählen. Wenn Sie jedoch unsicher sind, können Sie zuerst eine Swap-Datei verwenden und das System für eine Weile nutzen, um ein Gefühl dafür zu bekommen, wie viel Sie tauschen brauchen, und dann eine Swap-Partition erstellen, wenn Sie sich seiner Größe sicher sind.

Sie sollten auch wissen, dass Linux es ermöglicht, mehrere Swap-Partitionen und / oder Swap-Dateien gleichzeitig zu verwenden. Dies bedeutet, dass Sie, wenn Sie nur gelegentlich einen ungewöhnlichen Umfang an Swap-Speicherplatz benötigen, zu diesen Zeiten eine zusätzliche Swap-Datei einrichten können, anstatt den gesamten zugewiesenen Betrag die ganze Zeit zu behalten.

Ein Hinweis zur Betriebssystem-Terminologie: In der Informatik wird üblicherweise zwischen Swapping (Schreiben des gesamten Prozesses in Swap-Space) und Paging (Schreiben nur fester Größesteile, normalerweise einige Kilobyte) unterschieden. Paging ist normalerweise effizienter, und das ist es, was Linux tut, aber in der traditionellen Linux-Terminologie wird sowieso von einem Austausch gesprochen.

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


2
2018-05-04 15:43



Diese Antwort verbreitet das Missverständnis, dass virtueller Speicher das gleiche wie Swapping oder Paging ist. Die Verwendung von Festplatten als eine Erweiterung von RAM ist älter als der virtuelle Speicher. Und es gibt viele Systeme (wie die meisten SoHo-Router), die virtuellen Speicher haben, aber keine Festplatte als eine Erweiterung von RAM verwenden. (Und das ist auch nicht die Antwort auf die Frage des OP, da er keinen Swap verwendet.) - David Schwartz


VIRtual Spalte der Spitze, bezieht sich auf den Super-Raum (Superkonsumraum) des Prozesses, den der Prozess zur Laufzeit möglicherweise nicht wirklich nimmt. Es gibt eine andere Spalte RESident, die sich auf den tatsächlichen physikalischen Speicher / Speicherplatz bezieht, der vom Prozess zur Laufzeit zugewiesen wurde.

Der Grund für den Unterschied zwischen den beiden kann am Beispiel verstanden werden: Wenn der Prozess eine bestimmte Bibliothek verwendet, dann wird die Bibliotheksgröße auch für die virtual-size. da jedoch nur ein Teil der Bibliothek verwendet wird (d. h. einige verwendete Verfahren), wird dies helfen resident-size.

Siehe Mehr Info


2
2018-02-26 14:27





"VIRT" adressiert nur den Raum, RES ist der "reale" Speicher, aber die "SHR" (= geteilte) Menge von "RES" ist der Teil von RES, der mit anderen Prozessen geteilt wird. Für die meisten Prozesse glaube ich, dass durch das Subtrahieren von SHR von RES die Menge an Speicher erhalten wird, die wirklich diesem bestimmten Prozess zuzuschreiben ist.


0
2018-04-18 23:03