Ausdie Linux-Procfs-Dokumentation:
Active: Memory that has been used more recently and usually not reclaimed unless
absolutely necessary.
Inactive: Memory which has been less recently used. It is more eligible to be
reclaimed for other purposes
Committed_AS: The amount of memory presently allocated on the system. The committed
memory is a sum of all of the memory which has been allocated by
processes, even if it has not been "used" by them as of yet. (...)
Meine Frage bezieht sich auf den Commited_AS-Speicher und den Teil davon, der tatsächlich verwendet/ungenutzt ist. Meines Wissens ist der aktive Speicher der Teil des zugesicherten Speichers, der tatsächlich verwendet wird. Ich weiß jedoch nicht, was mit dem inaktiven Speicher passiert. Gehört dazu auch der zugesicherte, aber ungenutzte Speicher, abgesehen vom Speicher, der in letzter Zeit nicht verwendet wurde?
Antwort1
Inaktiver Speicher ist Speicher, den ein Prozess irgendwann einmal verwendet hat und der noch immer zugewiesen ist, der aber in letzter Zeit nicht verwendet wurde. Dies ist der Speicher, der am wahrscheinlichsten ausgelagert wird, um Platz für neu benötigte Blöcke zu schaffen.
Der zugesicherte Speicher ist die Gesamtheit des Speicherplatzes, der Prozessen nominell zugewiesen wurde. Es handelt sich um die Gesamtheit des Speicherplatzes, den Prozesse für verfügbar halten, einschließlich des aktiven (im RAM und vor kurzem verwendet), des inaktiven (im RAM und irgendwann verwendet, aber aufgrund der nicht kürzlich erfolgten Verwendung ausgelagerten) (einmal im RAM und verwendet, seitdem in den Swap-Speicher ausgelagert) und des nie verwendeten (Speicherplatzes, der von malloc() zurückgegeben, aber noch nicht berührt wurde).
Antwort2
Siehe man proc
; um direkt zu zitieren:
Ein Prozess, der 1 GB Speicher zuweist (mit malloc(3) oder ähnlichem), aber nur 300 MB dieses Speichers nutzt, wird als nur 300 MB Speicher nutzend angezeigt, selbst wenn ihm der Adressraum für das gesamte 1 GB zugewiesen ist. Dieses 1 GB ist Speicher, der von der VM „zugesichert“ wurde und von der zuweisenden Anwendung jederzeit verwendet werden kann.
Committed_AS
bezieht sich auf die Gesamtmenge an Speicher, die vom System für die dynamische Speicherzuweisung angefordert wird. Dies würde bedeuten, dass inaktiver Speicher (der sich nicht im Heap befindet) nicht gezählt wird. Hier kommt die Leistungsfähigkeit des virtuellen Speichers ins Spiel. Ein Prozess „denkt“, dass er über den gesamten angeforderten Speicher verfügt, aber in Wirklichkeit hat er nur so viel Speicher, wie er benötigt.
Dies knüpft auch direkt an dieovercommit_memory
sysctl
Konfigurationseinstellung, die verwendet werden kann, um eine Überbelegung des Speichers zu verhindern, so dass der Server nichtOOMselbst, wenn es jemals den gesamten "zugesicherten" Speicher auf einmal benötigt.