/proc/sys/vm/ - virtuelles Speicher-Subsystem
- /proc/sys/vm/
- Dieses Verzeichnis enthält Dateien für die Optimierung der
Speicherverwaltung und die Verwaltung der Puffer und Caches
(Zwischenspeicher).
- /proc/sys/vm/admin_reserve_kbytes (seit Linux 3.10)
- Diese Datei definiert die Menge an freiem Speicher (in KiB) auf dem
System, der für Benutzer mit der Capability CAP_SYS_ADMIN
reserviert werden sollte.
- Die Vorgabe für diesen Wert ist der kleinere Wert aus [3% von
freien Seiten, 8 MiB], ausgedrückt in kiB. Der Vorgabewert ist dazu
gedacht, unter dem standardmäßigen Überbuchungs
»Rate«-Modus (d.h. 0 in
/proc/sys/vm/overcommit_memory) genug für die Anmeldung des
Systemadministrators zum Beenden eines Prozesses, falls notwendig,
bereitzustellen.
- Systeme, die im »Nichtmals Überbuchen«-Modus«
(d.h. 2 in /proc/sys/vm/overcommit_memory) laufen, sollten den Wert
in dieser Datei vergrößern,um der vollen virtuelle
Speichergröße Rechnung zu tragen, die Programme zur
Wiederherstellung benötigen (z.B. login(1), ssh(1)
und top(1)). Andernfalls ist der Systemadministrator
möglicherweise nicht in der Lage, sich anzumelden, um das System
wiederherzustellen. Auf x86-64 ist beispielsweise 131072 (128 MiB
reserviert) ein geeigneter Wert.
- Die Änderung des Wertes in dieser Datei tritt in Kraft, wann immer
eine Anwendung Speicher anfordert.
- /proc/sys/vm/compact_memory (seit Linux 2.6.35)
- Wenn 1 in diese Datei geschrieben wird, werden alle Zonen zusammengefasst,
so dass der freie Speicher wo möglich in durchlaufenden
Blöcken verfügbar ist. Der Effekt dieser Aktion kann durch
Einsicht in /proc/buddyinfo geprüft werden.
- Nur vorhanden, falls der Kernel mit CONFIG_COMPACTION konfiguriert
wurde.
- /proc/sys/vm/drop_caches (seit Linux 2.6.16)
- Das Schreiben in diese Datei veranlasst den Kernel, saubere
Zwischenspeicher, Dentries und Inodes aus dem Speicher zu verwerfen, was
dazu führt, dass Speicher frei wird. Dies kann für das
Testen der Speicherverwaltung und der Durchführung reproduzierbarer
Dateisystembewertungen nützlich sein. Da das Schreiben in diese
Datei dazu führt, dass die Vorteile der Zwischenspeicherung
verloren gehen, kann es die Leistung des gesamten Systems vermindern.
- Zur Freigabe des Seitenzwischenspeichers, verwenden Sie:
-
echo 1 > /proc/sys/vm/drop_caches
- Zur Freigabe der Dentries und Inodes, verwenden Sie:
-
echo 2 > /proc/sys/vm/drop_caches
- Zur Freigabe des Seitenzwischenspeichers, der Dentries und Inodes,
verwenden Sie:
-
echo 3 > /proc/sys/vm/drop_caches
- Da das Schreiben in diese Datei unschädlich ist und
geänderte (schmutzige) Objekte nicht freigegeben werden
können, sollte der Benutzer vorher sync(8) aufrufen.
- /proc/sys/vm/sysctl_hugetlb_shm_group (seit Linux 2.6.7)
- Diese schreibbare Datei enthält die Gruppenkennung, der es erlaubt
ist, Speicher mittels großer Seiten zu belegen. Falls ein Prozess
über eine Dateisystemgruppenkennung oder irgendeine
zusätzliche Gruppenkennung, die auf diese Gruppenkennung passt,
verfügt, dann kann er große Speicherseiten belegen, ohne die
Capability CAP_IPC_LOCK zu halten; siehe memfd_create(2),
mmap(2) und shmget(2).
- /proc/sys/vm/legacy_va_layout (seit Linux 2.6.9)
- Wenn ungleich Null, deaktiviert dies das neue 32-Bit-Layout für das
»Memory Mapping«, der Kernel wird das alte (2.4) Layout
für alle Prozesse anwenden.
- /proc/sys/vm/memory_failure_early_kill (seit Linux 2.6.32)
- Steuert, wie Prozesse beendet werden, wenn ein nicht korrigierter
Speicherfehler (in der Regel ein 2-Bit-Fehler in einem Speichermodul), den
der Kernel nicht bearbeiten kann, im Hintergrund durch die Hardware
erkannt wird. In einigen Fällen (wenn es von der Seite noch eine
gültige Kopie auf der Festplatte gibt), wird der Kernel den Fehler
behandeln, ohne alle Anwendungen zu beeinträchtigen. Aber wenn es
keine weitere aktuelle Kopie der Daten gibt, wird er Prozesse abbrechen,
um die Verbreitung korrumpierter Daten zu unterbinden.
- Die Datei hat einen der folgenden Werte:
- 1
- Bricht alle Prozesse ab, in deren Speicher die beschädigte und
nicht erneut ladbare Seite gemappt ist, sobald die Beschädigung
erkannt wird. Beachten Sie, dass dies nicht für einige spezielle
Seitentypen wie Kernel-intern zugewiesene Daten oder den
Auslagerungszwischenspeicher unterstützt wird, es funktioniert aber
für die Mehrheit der Anwenderseiten.
- 0
- Die beschädigte Seite aus allen Prozesse ausmappen und einen
Prozess nur töten, falls er versucht, auf die Seite
zuzugreifen.
- Der Abbruch wird mittels eines SIGBUS-Signals erledigt, bei dem der
si_code auf BUS_MCEERR_AO gesetzt wird. Prozesse
können darauf reagieren, wenn sie wollen; siehe sigaction(2)
für weitere Einzelheiten.
- Diese Funktionalität ist nur auf Architekturen/Plattformen aktiv,
die über eine ausgefeilte Handhabung von »machine
checks« verfügen und hängt von den Fähigkeiten
der Hardware ab.
- Anwendungen können die Einstellung memory_failure_early_kill
individuell mit der prctl(2)-Operation PR_MCE_KILL
außer Kraft setzen.
- Nur vorhanden, falls der Kernel mit CONFIG_MEMORY_FAILURE
konfiguriert wurde.
- /proc/sys/vm/memory_failure_recovery (seit Linux 2.6.32)
- Aktiviert die Behebung von Speicherfehlern (wenn das von der Plattform
unterstützt wird).
- 1
- Fehlerbehebung versuchen.
- 0
- Bei Speicherfehlern immer eine Kernel Panic auslösen.
- Nur vorhanden, falls der Kernel mit CONFIG_MEMORY_FAILURE
konfiguriert wurde.
- /proc/sys/vm/oom_dump_tasks (seit Linux 2.6.25)
- Ermöglicht einen systemweiten Speicherauszug der Prozesse (ohne
Kernel-Threads), wenn der Kernel bei Speicherknappheit Prozesse abbricht
(OOM-Killer). Der Speicherauszug enthält die folgenden
Informationen für jeden Prozess (Thread, Prozess): Thread-Kennung,
reale Benutzerkennung, Thread-Gruppenkennung (Prozesskennung),
Größe des virtuellen Speichers, Größe des
Resident Set, die CPU, auf der der Prozess laufen soll, die
oom_adj-Bewertung (siehe die Beschreibung von
/proc/PID/oom_adj) und der Name des Befehls. Dies ist
hilfreich, um festzustellen, warum der OOM-Killer aufgerufen wurde und um
die außer Kontrolle geratenen Prozesse zu identifizieren.
- Ist der Wert in der Datei Null, wird diese Information unterdrückt.
Auf sehr großen Systemen mit Tausenden von Prozessen wird es kaum
praktikabel sein, für alle Prozesse den Speicherstatus auszugeben.
Solche Systeme sollten nicht gezwungen werden, bei OOM-Situationen
Leistungseinbußen zu erleiden, wenn die Informationen nicht
gewünscht werden.
- Ist der Wert von Null verschieden, werden diese Informationen jedesmal
ausgegeben, wenn der OOM-Killer einen speicherhungrigen Prozess ins
Jenseits schickt.
- Der Standardwert ist 0.
- /proc/sys/vm/oom_kill_allocating_task (seit Linux 2.6.24)
- Dies aktiviert oder deaktiviert das Beenden des OOM-auslösenden
Prozesses bei Speicherknappheit.
- Ist der Wert null, wertet der OOM-Killer die gesamte Taskliste aus und
wählt heuristisch einen Prozess als Opfer aus. Normalerweise
wählt er einen speicherhungrigen, außer Kontrolle
geratenenen Task aus, dessen Tod sehr viel Speicher freigibt.
- Ist der Wert ungleich Null, tötet der OOM-Killer den Prozess, der
die Speicherknappheit auslöste. Dadurch wird eine
möglicherweise aufwändige Analyse der Taskliste
vermieden.
- Falls /proc/sys/vm/panic_on_oom von null verschieden ist, hat das
Vorrang vor dem Wert in /proc/sys/vm/oom_kill_allocating_task, was
auch immer darin steht.
- Der Standardwert ist 0.
- /proc/sys/vm/overcommit_kbytes (seit Linux 3.14)
- Diese beschreibbare Datei stellt eine Alternative zu
/proc/sys/vm/overcommit_ratio zu Steuerung von CommitLimit
bereit, wenn /proc/sys/vm/overcommit_memory den Wert 2 hat. Es
ermöglicht die Menge der Speicherüberbuchung als absoluten
Wert (in kB) statt als Prozentwert, wie dies in overcommit_ratio
erfolgt, festzulegen. Dies ermöglicht granularere Steuerung des
CommitLimit auf Systemen mit extrem viel Speicher.
- Nur entweder overcommit_kbytes oder overcommit_ratio kann
einen Effekt haben. Falls overcommit_kbytes einen von Null
verschiedenen Wert enthält, dann wird dieser zur Berechnung von
CommitLimit verwandt, andernfalls wird overcommit_ratio
verwandt. Wird in eine der beiden Dateien geschrieben, dann wird der Wert
in der anderen auf Null gesetzt.
- /proc/sys/vm/overcommit_memory
- Diese Datei legt den Abrechnungsmodus des Kernels für virtuellen
Speicher fest. Die Werte sind:
- 0: heuristische Überbuchung (Standardverhalten)
1: immer überbuchen, niemals prüfen
2: immer prüfen, niemals überbuchen
- In Modus 0 werden Aufrufe von mmap(2) mit MAP_NORESERVE
nicht überprüft. Damit ist die Standardprüfung sehr
schwach und setzt den Prozess dem Risiko aus, zum Opfer des OOM-Killers zu
werden.
- In Modus 1 gibt der Kernel immer vor, noch über Speicher zu
verfügen, bis der Speicher schließlich wirklich
erschöpft ist. Ein Einsatzzweck stellt das wissenschaftliche
Rechnen dar, bei denen große, kaum besetzte Felder eingesetzt
werden. Vor Linux 2.6.0 impliziert jeder von Null verschiedene Wert den
Modus 1.
- In Modus 2 (verfügbar seit Linux 2.6) wird der reservierbare
gesamte virtuelle Adressraum (CommitLimit in /proc/meminfo)
wie folgt berechnet:
-
CommitLimit = (total_RAM - total_huge_TLB) *
overcommit_ratio / 100 + total_swap
- wobei:
- •
- total_RAM ist der gesamte RAM des Systems
- •
- total_huge_TLB ist die für große Speicherseiten
beiseite gestellte Speichermenge
- •
- overcommit_ratio ist der Wert aus
/proc/sys/vm/overcommit_ratio
- •
- total_swap ist die Menge des Auslagerungsbereichs
- Beispielsweise ergibt diese Formel auf einem System mit 16 GB an
physischem RAM, 16 GB an Auslagerungsspeicher, keinen für
große Speicherseiten gewidmeten Bereich und einem
overcommit_ratio von 50 ein CommitLimit von 24 GB.
- Falls der Wert in /proc/sys/vm/overcommit_kbytes von Null
verschieden ist, wird CommitLimit stattdessen seit Linux 3.14 wie
folgt berechnet:
-
CommitLimit = overcommit_kbytes + total_swap
- Siehe auch die Beschreibung von /proc/sys/vm/admin_reserve_kbytes
und /proc/sys/vm/user_reserve_kbytes.
- /proc/sys/vm/overcommit_ratio (seit Linux 2.6.0)
- Diese schreibbare Datei definiert einen Prozentwert, zu dem Speicher
überbucht werden kann. Der Vorgabewert in der Datei ist 50. Siehe
die Beschreibung von /proc/sys/vm/overcommit_memory.
- /proc/sys/vm/panic_on_oom (seit Linux 2.6.18)
- Dies aktiviert oder deaktiviert eine Kernel-Panik bei
Speicherknappheit.
- Wenn diese Datei auf den Wert 0 gesetzt wird, wird der OOM-Killer des
Kernels einen außer Kontrolle geratenen Prozess töten.
Normalerweise findet er einen außer Kontrolle geratenen Prozess und
das System überlebt.
- Wenn diese Datei auf den Wert 1 gesetzt ist, verfällt der Kernel in
Panik, wenn Speicherknappheit eintritt. Wenn allerdings ein Prozess die
Zuweisungen an bestimmte Knoten mit Speicherstrategien (mbind(2)
MPOL_BIND) oder Cpusets (cpuset(7)) begrenzt und die Knoten
einen Speichererschöpfungs-Zustand erreichen, kann ein Prozess vom
OOM-Killer getötet werden. In diesem Fall tritt keine Panik ein:
Weil der Speicher anderer Knoten noch frei sein kann, muss das System noch
nicht als ganzes unter Speicherknappheit leiden.
- Wenn diese Datei schon auf den Wert 2 gesetzt ist, wird bei
Speicherknappheit immer eine Kernel-Panik ausgelöst.
- Der Standardwert ist 0. 1 und 2 sind für die Ausfallsicherung in
Clustern bestimmt. Wählen Sie den Wert entsprechend ihrer Strategie
oder im Sinn der Ausfallsicherung.
- /proc/sys/vm/swappiness
- Der Wert in dieser Datei legt fest, wie aggressiv der Kernel
Speicherseiten auslagert. Hohe Werte machen ihn aggressiver, kleinere
Werte sanftmütiger. Der Standardwert ist 60.
- /proc/sys/vm/user_reserve_kbytes (seit Linux 3.10)
- Legt die Speichermenge (in kiB) fest, die für Benutzerprozesse zu
reservieren ist. Dies ist dazu gedacht, einen Benutzer vom Starten eines
einzelnen, speicherfressenden Prozesses abzuhalten, so dass er sich nicht
von dem Speicherfresser erholen kann (ihn beenden kann). Der Wert in
dieser Datei hat nur eine Auswirkung, wenn
/proc/sys/vm/overcommit_memory auf 2 gesetzt ist (»niemals
Überbuchen«-Modus). In diesem Fall reserviert das System
eine Speichermenge, die der kleinere Wert aus [3% der aktuellen
Prozessgröße, user_reserve_kbytes] ist.
- Der Vorgabewert in dieser Datei ist der kleinere Wert aus [3% der freien
Seiten, 128 MiB], ausgedrückt in kiB.
- Falls der Wert in dieser Datei auf Null gesetzt wird, darf ein Benutzer
sämtlichen Speicher durch einen einzelnen Prozess belegen
(abzüglich der durch /proc/sys/vm/admin_reserve_kbytes
reservierten Menge). Alle nachfolgenden Versuche, einen Befehl
auszuführen, führen dann zu »fork: Cannot allocate
memory«.
- Die Änderung des Wertes in dieser Datei tritt in Kraft, wann immer
eine Anwendung Speicher anfordert.
- /proc/sys/vm/unprivileged_userfaultfd (seit Linux 5.2)
- Diese (schreibbare) Datei legt einen Schalter offen, der steuert, ob nicht
privilegierten Prozessen erlaubt wird, userfaultfd(2) einzusetzen.
Falls diese Datei den Wert 1 enthält, dann dürfen nicht
privilegierte Prozesse userfaultfd(2) verwenden. Falls diese Datei
den Wert 0 enthält, dann dürfen nur Prozesse, die
über die Capability CAP_SYS_PTRACE verfügen,
userfaultfd(2) einsetzen. Der Vorgabewert in dieser Datei ist
1.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von
Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Dr. Tobias
Quathamer <toddy@debian.org>, Chris Leick <c.leick@vollbio.de>,
Erik Pfannenstein <debianignatz@gmx.de> und Helge Kreutzmann
<debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU General
Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite
finden, schicken Sie bitte eine E-Mail an die Mailingliste der
Übersetzer:
debian-l10n-german@lists.debian.org.