proc_sys_vm(5)

BEZEICHNUNG
/proc/sys/vm/ - virtuelles Speicher-Subsystem

BESCHREIBUNG

/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/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.

SIEHE AUCH
proc(5), proc_sys(5)

Ü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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.