3.7. memory
Das
memory
-Subsystem erstellt automatische Berichte zu Speicherressourcen, die von den Aufgaben in einer Kontrollgruppe verwendet werden und setzt Grenzwerte für den Speicherverbrauch durch diese Aufgaben fest.
- memory.stat
- zeigt eine größere Bandbreite von Speicher-Statistiken an, wie in der folgenden Tabelle beschrieben:
Tabelle 3.1. Werte, die von memory.stat angezeigt werden Statistik Beschreibung cache
Seiten-Cache, inklusive tmpfs
(shmem
), in Bytesrss
anonymer und Swap-Cache-Speicher, exklusive tmpfs
(shmem
), in Bytesmapped_file
Größe von Memory-Mapped Dateien, inklusive tmpfs
(shmem
), in Bytespgpgin
Anzahl der in den Seitenspeicher geschriebenen Seiten pgpgout
Anzahl der aus dem Seitenspeicher gelesenen Seiten swap
Swap-Verwendung, in Bytes active_anon
anonymer und Swap-Cache-Speicher auf aktiver least-recently-used (LRU) Liste, inklusive tmpfs
(shmem
), in Bytesinactive_anon
anonymer und Swap-Cache-Speicher auf inaktiver LRU-Liste, inklusive tmpfs
(shmem
), in Bytesactive_file
Dateigestützter Speicher auf aktiver LRU-Liste, in Bytes inactive_file
Dateigestützter Speicher auf inaktiver LRU-Liste, in Bytes unevictable
Speicher, der nicht zurückgefordert werden kann, in Bytes hierarchical_memory_limit
Speichergrenze für die Hierarchie, welche die memory
-Kontrollgruppe enthält, in Byteshierarchical_memsw_limit
Grenze für Speicher plus Swap für die Hierarchie, welche die memory
-Kontrollgruppe enthält, in BytesZusätzlich verfügt jede dieser Dateien (mit Ausnahme vonhierarchical_memory_limit
undhierarchical_memsw_limit
) über ein Gegenstück mit vorangestelltemtotal_
, das nicht nur über die Kontrollgruppe berichtet, sondern auch über alle zugehörigen Untergruppen. Zum Beispiel zeigtswap
den Swap-Verbrauch einer Kontrollgruppe an, undtotal_swap
zeigt den gesamten Swap-Verbrauch einer Kontrollgruppe einschließlich aller untergeordneten Gruppen an.Wenn Sie die vonmemory.stat
angezeigten Werte interpretieren, beachten Sie, wie die verschiedenen Statistiken zusammenhängen:active_anon
+inactive_anon
= anonymer Speicher + Datei-Cache fürtmpfs
+ Swap-CacheDemzufolge gilt:active_anon
+inactive_anon
≠rss
, darss
nichttmpfs
einschließt.active_file
+inactive_file
= Cache - Größe vontmpfs
- memory.usage_in_bytes
- zeigt den aktuellen gesamten Speicherverbrauch von Prozessen in der Kontrollgruppe an (in Bytes).
- memory.memsw.usage_in_bytes
- zeigt die Summe des aktuellen Speicherverbrauchs plus Swap-Space-Verbrauch von Prozessen in der Kontrollgruppe an (in Bytes).
- memory.max_usage_in_bytes
- zeigt den maximalen Speicherverbrauch von Prozessen in der Kontrollgruppe an (in Bytes).
- memory.memsw.max_usage_in_bytes
- zeigt den maximalen Swap- und Speicherverbrauch von Prozessen in der Kontrollgruppe an (in Bytes).
- memory.limit_in_bytes
- legt die maximale Menge an Benutzerspeicher fest (inklusive Datei-Cache). Falls keine Einheiten angegeben werden, wird dieser Wert als Bytes interpretiert. Es ist jedoch möglich, Suffixe zur Darstellung von größeren Einheiten zu verwenden —
k
oderK
für Kilobytes,m
oderM
für Megabytes undg
oderG
für Gigabytes.Sie könnenmemory.limit_in_bytes
nicht dazu verwenden, um die Root-Kontrollgruppe zu begrenzen; nur Gruppen an niedrigerer Stelle in der Hierarchie können Sie Werte zuordnen.Schreiben Sie-1
inmemory.limit_in_bytes
, um jegliche vorhandene Grenzen zu entfernen. - memory.memsw.limit_in_bytes
- legt die maximale Menge für die Summe von Speicher und Swap-Space fest. Falls keine Einheiten angegeben werden, wird dieser Wert als Bytes interpretiert. Es ist jedoch möglich, Suffixe zur Darstellung von größeren Einheiten zu verwenden —
k
oderK
für Kilobytes,m
oderM
für Megabytes undg
oderG
für Gigabytes.Sie könnenmemory.memsw.limit_in_bytes
nicht dazu verwenden, um die Root-Kontrollgruppe zu begrenzen; nur Gruppen an niedrigerer Stelle in der Hierarchie können Sie Werte zuordnen.Schreiben Sie-1
inmemory.memsw.limit_in_bytes
, um jegliche vorhandene Grenzen zu entfernen. - memory.failcnt
- zeigt an, wie oft der in
memory.limit_in_bytes
festgelegte Wert für die Speichergrenze erreicht wurde. - memory.memsw.failcnt
- zeigt an, wie oft der in
memory.memsw.limit_in_bytes
festgelegte Grenzwert für die Summe von Speicher und Swap-Space erreicht wurde. - memory.force_empty
- wenn auf
0
gesetzt, wird der Speicher von allen Seiten gelöscht, die von Aufgaben in dieser Kontrollgruppe verwendet werden. Diese Schnittstelle kann nur benutzt werden, wenn die Kontrollgruppe keine Aufgaben besitzt. Falls kein Speicher freigesetzt werden kann, wird es in eine übergeordnete Kontrollgruppe verschoben, falls möglich. Verwenden Siememory.force_empty
, bevor Sie eine Kontrollgruppe verschieben, um das Verschieben von nicht mehr verwendeten Seiten-Caches auf die übergeordnete Kontrollgruppe zu vermeiden. - memory.swappiness
- spezifiziert die Tendenz des Kernels, Prozessspeicher, der von Aufgaben in dieser Kontrollgruppe beansprucht wird, aus dem Speicher auszulagern (Swap), anstatt die Seiten vom Seiten-Cache zurückzufordern. Dies entspricht der Tendenz, wie sie auch für das gesamte System in
/proc/sys/vm/swappiness
definiert wird und wird genauso berechnet. Der Standardwert ist60
. Werte unter60
verringern die Tendenz des Kernels, Prozessspeicher auszulagern. Werte über60
erhöhen die Tendenz des Kernels, Prozessspeicher auszulagern und bei Werten größer als100
beginnt der Kernel, Seiten auszulagern, die Teil des Adressraums der Prozesse in dieser Kontrollgruppe sind.Beachten Sie, dass der Wert0
nicht verhindert, dass Prozessspeicher ausgelagert wird; die Auslagerung kann nach wie vor erfolgen, wenn Systemspeicher knapp wird, da die globale Logik zur Verwaltung des virtuellen Speichers den Wert der Kontrollgruppe nicht liest. Um Seiten vollständig zu sperren, verwenden Siemlock()
anstelle von Kontrollgruppen.Sie können Tendenz zur Auslagerung (Swappiness) für die folgenden Gruppen nicht ändern:- die Root-Kontrollgruppe, welche die Swappiness-Angabe aus
/proc/sys/vm/swappiness
verwendet. - eine Kontrollgruppe, die über untergeordnete Gruppen verfügt.
- memory.use_hierarchy
- beinhaltet ein Flag (
0
oder1
), das definiert, ob Speicherverbrauch in einer Hierarchie von Kontrollgruppen berücksichtigt werden soll. Falls aktiviert (1
), fordert der Speicher-Controller Speicher von untergeordneten Prozessen sowie von solchen Prozessen, die ihre Speichergrenze überschreiten, zurück. Standardmäßig (0
) fordert der Controller keinen Speicher von untergeordneten Aufgaben zurück.