Ich habe einen Prozess, der oben meldet, dass 6 GB residenter Speicher und 70 GB virtueller Speicher zugewiesen sind. Das Seltsame ist, dass auf diesem bestimmten Server nur 8 GB physischer und 35 GB Swap-Speicher verfügbar sind.
Aus dem 'Top'-Handbuch:
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. (Note: you can define the STATSIZE=1 environment vari-
able and the VIRT will be calculated from the /proc/#/state VmSize
field.)
VIRT = SWAP + RES.
Angesichts dieser Erklärung würde ich erwarten, dass die Zuweisung des virutalen Speichers für einen Prozess auf meinen verfügbaren Swap + physischen Speicher beschränkt ist.
Laut 'pmap' sind der Code, die gemeinsam genutzte Bibliothek und die gemeinsam genutzten Speicherabschnitte dieses Prozesses minimal - nicht mehr als 300 MB oder so.
Offensichtlich funktionieren die Maschine und der Prozess immer noch korrekt (wenn auch langsam). Was fehlt mir hier?
quelle
Hier ist eine Diskussion über virtuelles vs. residentes Gedächtnis:
/programming/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used
Die Diskussion bezieht sich auf Java-Prozesse, ist jedoch auf alles anwendbar, was unter Linux ausgeführt wird. Der Hauptpunkt in Bezug auf Tugend ist, dass die Summe eine ganze Reihe von Dingen enthält, die möglicherweise nie verwendet werden. Virt ist für 32-Bit-Betriebssysteme eine gute Wahl (da Prozesse den adressierbaren Speicherplatz einschränken), ist aber ansonsten weitgehend nicht nützlich. Wie bereits erwähnt, ist der residente Speicher zu beachten, der auf den verfügbaren physischen RAM und Ihren Swap beschränkt ist.
quelle
Dies liegt wahrscheinlich daran, dass der Adressraum des Prozesses die von Ihnen angegebene Größe hat, aber vom Betriebssystem nicht wirklich zugewiesen wird.
Von: http://lwn.net/Articles/428100/
Das ist also die unelegante Art und Weise, wie Speicherverwaltung manchmal durchgeführt wird - ein kontinuierlicher Adressraum vereinfacht das Freigeben nicht verwendeter Mem.
quelle
Die Antwort lautet wahrscheinlich MMAP - die Daten befinden sich auf der Festplatte, befinden sich jedoch "außerhalb" des Austauschs und können nicht mit dem Befehl "free" oder "top" angezeigt werden.
Wenn der Java-Prozess nicht zu kompliziert ist, können Sie versuchen, mit "lsof" zu spielen, um herauszufinden, wo sich die MMAP-Datei befindet. Wenn dieser Java-Prozess jedoch kompliziert ist, ist er schwer zu erkennen.
quelle
Ich war auch überrascht, dass Linux es Ihnen ermöglicht, mehr virtuellen Speicher zuzuweisen, als physischer Speicher + Swap-Speicher vorhanden ist, aber anscheinend hilft es in typischen Situationen bei der Leistung.
http://www.linuxjournal.com/article/10678
quelle