1. Einleitung
In Linux-Umgebungen können bestimmte Prozesse – insbesondere Monitoring-Tools wie cAdvisor – auf Systemlimits stoßen. Häufige Fehler sind:
- „too many open files“
- „inotify_init: too many open files“
- Container stürzt mit Exit-Code 255 ab
Diese Fehler treten auf, wenn die Anzahl der offenen Dateien oder die Anzahl der inotify-Watches/Instanzen überschritten wird.
2. Systemlimits dauerhaft erhöhen
2.1 Offene Dateien (fs.file-max)
Das Systemlimit für offene Dateien wird über den Kernel-Parameter fs.file-max
gesteuert.
Befehle:
echo "fs.file-max = 965536" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
echo "fs.file-max = 965536" | sudo tee /etc/sysctl.d/60-fs-file-max.conf
sudo sysctl -p /etc/sysctl.d/60-fs-file-max.conf
Hinweis:
Beide Methoden sind möglich. Die Datei in /etc/sysctl.d/
wird auf systemd-basierten Systemen bevorzugt.
2.2 inotify-Limits erhöhen
inotify wird verwendet, um Dateisystemänderungen zu überwachen. Die Limits können mit folgenden Befehlen erhöht werden:
Befehle:
echo "fs.inotify.max_user_watches=1048576" | sudo tee -a /etc/sysctl.conf
echo "fs.inotify.max_user_instances=9024" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Hinweis:
Diese Werte sind für große Systeme geeignet. Passe sie ggf. an deine Anforderungen an.
3. Limits für Docker-Container prüfen
Um die aktuellen Limits eines Docker-Containers zu prüfen, verwende folgenden Befehl:
Befehl:
docker exec <container_id> bash -c "ulimit -a"
Beispiel:
docker exec 8e5711e82665 bash -c "ulimit -a"
Damit siehst du alle aktuellen Limits im Container.
4. Limits für systemd-Dienste (z.B. Docker)
Damit systemd-Dienste (wie Docker) die neuen Limits nutzen, musst du ggf. die systemd-Unit anpassen:
Beispiel für Docker:
sudo mkdir -p /etc/systemd/system/docker.service.d
echo -e "[Service]\nLimitNOFILE=1048576" | sudo tee /etc/systemd/system/docker.service.d/limits.conf
sudo systemctl daemon-reload
sudo systemctl restart docker
Damit wird das Limit für offene Dateien auch für den Docker-Daemon erhöht.
5. Zusammenfassung
- Systemlimits erhöhen:
fs.file-max
für offene Dateienfs.inotify.max_user_watches
undfs.inotify.max_user_instances
für inotify
- Limits prüfen:
ulimit -a
im Container
- systemd-Limits anpassen:
- Drop-in-Datei für Docker oder andere Dienste
- E-Mail-Versand testen:
- Lokalen SMTP-Server wie MailHog verwenden
6. Beispielhafte Befehle
# Systemlimits für offene Dateien
echo "fs.file-max = 965536" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
echo "fs.file-max = 965536" | sudo tee /etc/sysctl.d/60-fs-file-max.conf
sudo sysctl -p /etc/sysctl.d/60-fs-file-max.conf
# inotify-Limits
echo "fs.inotify.max_user_watches=1048576" | sudo tee -a /etc/sysctl.conf
echo "fs.inotify.max_user_instances=9024" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# Limits im Container prüfen
docker exec 8e5711e82665 bash -c "ulimit -a"
# systemd-Limit für Docker
sudo mkdir -p /etc/systemd/system/docker.service.d
echo -e "[Service]\nLimitNOFILE=1048576" | sudo tee /etc/systemd/system/docker.service.d/limits.conf
sudo systemctl daemon-reload
sudo systemctl restart docker
Schreibe einen Kommentar