Dynamic Tuning: sysctl & /proc/sys (Artikel 372)
Beherrschung der dynamischen Kernel-Anpassung unter Linux. Erfahren Sie alles über die Hierarchie der sysctl-Konfigurationen, das Verwalten von Parametern via /proc und die Automatisierung von Tuning-Workflows.
# Dynamic Tuning: Den Kernel im laufenden Betrieb biegen
TL;DR / Management Summary Ein Senior Admin startet einen Server nicht neu, um einen Parameter zu ändern. Er nutzt
sysctloder schreibt direkt in das virtuelle/proc/sys/Dateisystem. In diesem Modul lernen wir die Hierarchie der Konfigurationsdateien kennen, verstehen die Lade-Reihenfolge unter SLES und Arch und automatisieren die Verteilung von Tuning-Parametern auf hunderte Server, ohne die Stabilität zu gefährden.
# 1. Einführung & Architektur
Die Schnittstelle zum RAM.
sysctl ist lediglich ein Frontend für das /proc/sys/ Verzeichnis. Jede Datei dort entspricht einem Kernel-Parameter.
# Die Management-Ebenen (Mermaid)
graph LR
A[Admin / Script] -->|sysctl -w| B[Kernel API]
A -->|echo >| C[/proc/sys/...]
B --> D[Active Kernel Memory]
C --> D
subgraph "Persistence"
E[/etc/sysctl.d/*.conf] -->|boot / sysctl --system| B
F[/etc/sysctl.conf] -->|legacy| B
end
# 2. Die Hierarchie der Konfiguration
Wer überschreibt wen?
Systemd lädt die Konfigurationen beim Booten in einer festen Reihenfolge:
/usr/lib/sysctl.d/*.conf(Distributions-Standards)/etc/sysctl.d/*.conf(Admin-Anpassungen - Hier arbeiten wir!)/etc/sysctl.conf(Veraltet, aber oft noch vorhanden)
Best Practice: Benennen Sie Ihre Dateien in /etc/sysctl.d/ mit Präfixen (z.B. 10-network.conf, 99-security.conf), um die Lade-Reihenfolge explizit zu steuern.
# 3. Runtime Manipulation
Änderungen ohne Files.
# Den Hebel sofort umlegen
# Setzt den Parameter sofort aktiv (bis zum nächsten Reboot)
sudo sysctl -w net.ipv4.ip_forward=1
# Direkter Weg via Filesystem (identisch)
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
# Konfiguration neu laden
# Lädt alle Dateien in der korrekten Hierarchie neu
sudo sysctl --system
# 4. Day-2 Operations: Flotten-Management
Automation mit Ansible.
In großen Umgebungen nutzen wir das sysctl Modul von Ansible, das sich um die Persistenz kümmert.
- name: Optimize swappiness
ansible.posix.sysctl:
name: vm.swappiness
value: '10'
state: present
reload: yes
# 5. Troubleshooting & “War Stories”
Wenn die Werte zurückspringen.
# Story 1: “Der ignorierte Parameter”
Symptom: Der Admin schreibt net.core.somaxconn = 4096 in die /etc/sysctl.conf, aber nach dem Reboot zeigt sysctl net.core.somaxconn wieder den alten Wert 128.
Ursache: Eine Datei unter /etc/sysctl.d/ (z.B. vom Hardware-Hersteller oder einer Applikation) wird später geladen und überschreibt die sysctl.conf.
Lösung: Nutzen Sie sysctl --system, um zu sehen, welche Files geladen werden. Verschieben Sie Ihre Änderung in eine Datei mit hohem Präfix (z.B. 99-custom.conf).
# Story 2: “Der Read-Only Fehler”
Symptom: sysctl -w kernel.threads-max=1000 schlägt mit Permission Denied fehl, obwohl man Root ist.
Ursache: Manche Parameter sind “Read-Only” nach dem Booten oder hängen von anderen Einstellungen ab (z.B. wenn der Kernel im Lockdown-Modus läuft, siehe Artikel 371).
Lösung: Prüfen Sie, ob der Parameter via Boot-Option (GRUB) gesetzt werden muss oder ob das System-Hardening die Änderung zur Laufzeit verbietet.
# 6. Fazit & Empfehlung
- Organisation: Nutzen Sie ausschließlich
/etc/sysctl.d/für Ihre Änderungen. - Validierung: Prüfen Sie nach jeder Änderung den Effekt:
sysctl <parameter>. - Wahl: Nutzen Sie
sysctlBefehle in Skripten, anstatt direkt in/proc/sys/zu schreiben – es ist sicherer und bietet bessere Fehlermeldungen.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Alle Parameter listen | sysctl -a |
| Suche nach Netz-Params | `sysctl -a |
| Variable temporär setzen | sysctl -w name=value |
| Alles aus Files laden | sysctl --system |
| Nur ein File laden | sysctl -p /etc/sysctl.d/my.conf |
| Wert ohne Name zeigen | sysctl -n vm.swappiness |
| Wo liegt das File? | find /proc/sys -name "swappiness" |
| Hilfe zu Parameter | modinfo -p <kernel_module> |
| Kernel Version Info | sysctl kernel.version |
| Magic SysRq Status | sysctl kernel.sysrq |