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.