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:
Expand Tabelle 3.1. Werte, die von memory.stat angezeigt werden Statistik Beschreibung cacheSeiten-Cache, inklusive tmpfs(shmem), in Bytesrssanonymer und Swap-Cache-Speicher, exklusive tmpfs(shmem), in Bytesmapped_fileGröße von Memory-Mapped Dateien, inklusive tmpfs(shmem), in BytespgpginAnzahl der in den Seitenspeicher geschriebenen Seiten pgpgoutAnzahl der aus dem Seitenspeicher gelesenen Seiten swapSwap-Verwendung, in Bytes active_anonanonymer und Swap-Cache-Speicher auf aktiver least-recently-used (LRU) Liste, inklusive tmpfs(shmem), in Bytesinactive_anonanonymer und Swap-Cache-Speicher auf inaktiver LRU-Liste, inklusive tmpfs(shmem), in Bytesactive_fileDateigestützter Speicher auf aktiver LRU-Liste, in Bytes inactive_fileDateigestützter Speicher auf inaktiver LRU-Liste, in Bytes unevictableSpeicher, der nicht zurückgefordert werden kann, in Bytes hierarchical_memory_limitSpeichergrenze für die Hierarchie, welche die memory-Kontrollgruppe enthält, in Byteshierarchical_memsw_limitGrenze 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_limitundhierarchical_memsw_limit) über ein Gegenstück mit vorangestelltemtotal_, das nicht nur über die Kontrollgruppe berichtet, sondern auch über alle zugehörigen Untergruppen. Zum Beispiel zeigtswapden Swap-Verbrauch einer Kontrollgruppe an, undtotal_swapzeigt den gesamten Swap-Verbrauch einer Kontrollgruppe einschließlich aller untergeordneten Gruppen an.Wenn Sie die vonmemory.statangezeigten 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, darssnichttmpfseinschließ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 —
koderKfür Kilobytes,moderMfür Megabytes undgoderGfür Gigabytes.Sie könnenmemory.limit_in_bytesnicht dazu verwenden, um die Root-Kontrollgruppe zu begrenzen; nur Gruppen an niedrigerer Stelle in der Hierarchie können Sie Werte zuordnen.Schreiben Sie-1inmemory.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 —
koderKfür Kilobytes,moderMfür Megabytes undgoderGfür Gigabytes.Sie könnenmemory.memsw.limit_in_bytesnicht dazu verwenden, um die Root-Kontrollgruppe zu begrenzen; nur Gruppen an niedrigerer Stelle in der Hierarchie können Sie Werte zuordnen.Schreiben Sie-1inmemory.memsw.limit_in_bytes, um jegliche vorhandene Grenzen zu entfernen. - memory.failcnt
- zeigt an, wie oft der in
memory.limit_in_bytesfestgelegte Wert für die Speichergrenze erreicht wurde. - memory.memsw.failcnt
- zeigt an, wie oft der in
memory.memsw.limit_in_bytesfestgelegte Grenzwert für die Summe von Speicher und Swap-Space erreicht wurde. - memory.force_empty
- wenn auf
0gesetzt, 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/swappinessdefiniert wird und wird genauso berechnet. Der Standardwert ist60. Werte unter60verringern die Tendenz des Kernels, Prozessspeicher auszulagern. Werte über60erhöhen die Tendenz des Kernels, Prozessspeicher auszulagern und bei Werten größer als100beginnt der Kernel, Seiten auszulagern, die Teil des Adressraums der Prozesse in dieser Kontrollgruppe sind.Beachten Sie, dass der Wert0nicht 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/swappinessverwendet. - eine Kontrollgruppe, die über untergeordnete Gruppen verfügt.
- memory.use_hierarchy
- beinhaltet ein Flag (
0oder1), 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.