Site icon bintorosoft.com

File Descriptor Limits: ulimit, systemd und Nginx für High Concurrency

Turtle with glasses and a surprised look on her face is looking at a laptop on white background.

File Descriptor (FD) Limits sind eine zentrale Stellschraube, wenn es darum geht, Webserver wie Nginx für hohe gleichzeitige Verbindungen zu skalieren. Jeder offene Socket, jede geöffnete Datei oder Pipe verbraucht ein File Descriptor. Standardmäßig ist die Zahl der FDs pro Prozess begrenzt, was bei hohen Lasten schnell zu “too many open files” Fehlern führt. In diesem Tutorial betrachten wir, wie ulimit, systemd und Nginx zusammenarbeiten, um stabile High-Concurrency-Setups zu ermöglichen.

Grundlagen von File Descriptors

Ein File Descriptor ist eine nicht-negative Ganzzahl, die vom Betriebssystem genutzt wird, um auf geöffnete Dateien, Sockets oder Pipes zu verweisen. Typischerweise gibt es:

Jeder weitere geöffnete Socket, z. B. eine HTTP-Verbindung, verbraucht einen FD. Bei 10.000 gleichzeitigen Verbindungen werden also mindestens 10.000 File Descriptors benötigt.

Systemweite Limits vs. Prozess-Limits

Linux unterscheidet zwischen systemweiten und prozessbezogenen FD-Limits:

Abfragen der aktuellen Limits

# Systemweite maximale FDs
cat /proc/sys/fs/file-max

Limits für den aktuellen User

ulimit -n

ulimit korrekt setzen

Die einfachste Methode, um FD-Limits zu erhöhen, ist über ulimit in der Shell oder in Startskripten. Für Nginx oder andere Server ist jedoch zu beachten, dass der Prozess seine eigenen Limits beim Start übernimmt.

Beispiel: FD-Limit erhöhen

# Temporär für die Shell
ulimit -n 65535

Dauerhaft in /etc/security/limits.conf

nginx soft nofile 65535
nginx hard nofile 65535

Wichtig: Ein zu hoher Wert kann das System belasten, daher sollte die Zahl realistisch an die erwartete Last angepasst werden.

systemd und FD-Limits

Auf modernen Systemen wird Nginx oft als systemd-Service gestartet. Hier überschreibt systemd die ulimit-Werte in den Unit-Dateien.

Beispiel für systemd Service-Override

# Erstellen Sie ein Override-Verzeichnis
sudo systemctl edit nginx

Fügen Sie folgende Zeilen ein:

[Service]
LimitNOFILE=65535

Service neu laden und starten

sudo systemctl daemon-reexec
sudo systemctl restart nginx

Damit stellen Sie sicher, dass Nginx beim Start die gewünschten Limits erhält.

Nginx-spezifische Einstellungen

Nginx nutzt Worker-Prozesse, die jeweils FDs benötigen. Neben den Systemlimits gibt es auch Konfigurationen in Nginx:

worker_rlimit_nofile

Mit dieser Direktive können Sie Nginx anweisen, die FD-Limits der Worker zu erhöhen:

worker_processes auto;
worker_rlimit_nofile 65535;

events {
worker_connections 10240;
}

Die maximal möglichen gleichzeitigen Verbindungen berechnet sich ungefähr so:

Max Connections = worker_processes * worker_connections

Monitoring von File Descriptors

Vor und nach dem Tuning ist Monitoring entscheidend:

Tipps für High Concurrency

Praktisches Beispiel: Nginx auf 50.000 gleichzeitige Verbindungen

worker_processes 4;
worker_rlimit_nofile 65535;

events {
worker_connections 12800;
}

Berechnung: 4 Worker * 12800 Connections = 51.200 gleichzeitige Verbindungen theoretisch möglich.

Fazit

File Descriptor Limits sind ein oft unterschätzter Faktor für skalierbare Webserver. Die Kombination aus ulimit, systemd-Overrides und Nginx-spezifischen Einstellungen erlaubt es, High-Concurrency-Setups zuverlässig zu betreiben. Wichtig ist die Überwachung und iterative Anpassung an reale Lastszenarien, statt pauschaler Werte.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Exit mobile version