ulimit - Prozesslimits verstehen und setzen
Unter Linux hat jeder Prozess Limits für offene Dateien, Threads, Speicher und mehr.
Diese Limits sind oft der Grund warum Dienste unter Last seltsam verhalten.
Aktuelle Limits anzeigen
ulimit -a
Zeigt alle Limits des aktuellen Benutzers. Besonders relevant sind open files und max user processes.
Das häufigste Problem: zu wenige offene Dateien
Nginx, MySQL und Node.js brauchen unter Last viele gleichzeitig offene Dateien.
Der Standardwert von 1024 ist zu niedrig.
Limit für die aktuelle Session temporär erhöhen.
ulimit -n 65535
Dauerhaft setzen
sudo nano /etc/security/limits.conf
www-data soft nofile 65535 www-data hard nofile 65535 * soft nofile 65535 * hard nofile 65535
soft ist das Standardlimit das der Prozess selbst erhöhen darf bis zum hard Limit.
Für systemd-Dienste
limits.conf gilt nicht für systemd-Services. Dort in der Service-Datei eintragen.
[Service] LimitNOFILE=65535
sudo systemctl daemon-reload sudo systemctl restart nginx
Prüfen ob das Limit greift
cat /proc/$(pgrep nginx | head -1)/limits | grep "open files"
Zeigt die tatsächlich aktiven Limits des laufenden nginx-Prozesses.