Ich habe den scheinbar häufigen Fehler "zu viele Dateideskriptoren" auf nginx erhalten. Nach langem Suchen besteht die Lösung eindeutig darin, die Anzahl der für nginx verfügbaren Dateideskriptoren zu erhöhen. Aber es gibt nicht genug Informationen, damit ich mich auf sinnvolle und sichere Weise wohl fühle. Hier sind die wichtigsten Punkte, die in den meisten Forum- / E-Mail-Threads behandelt werden:
- Das Betriebssystem hat eine eigene Gesamtbeschreibung für Dateideskriptoren (auf meinem System wird
cat /proc/sys/fs/file-max
"100678" ausgegeben). - Jeder Benutzer kann auch sein eigenes Limit haben (aber auf meinem System,
ulimit
wenn jeder Benutzer "unbegrenzt" ausgibt, siehe Update unten mit mehr Details ) - Einige Leute sagten etwas in Anlehnung an das, was diese Person sagte: 'Die Richtlinie worker_rlimit_nofile gibt nicht "wie viele" an, sondern das Betriebssystemlimit, das dies tut. Die Richtlinie worker_rlimit_nofile ermöglicht nur eine schnelle und schmutzige Möglichkeit, diese Grenze zu vergrößern, wenn dies nicht ausreicht. ' Ich denke also, die Implikation ist, dass es "besser" ist, das Limit für den Nginx OS-Benutzer anstatt in der Konfiguration festzulegen?
Ich kann einfach einen worker_rlimit_nofile-Wert eingeben, der größer ist als die Anzahl der Verbindungen pro Worker, und ihn einen Tag nennen, aber ich habe das Gefühl, dass ich nicht wirklich weiß, was hier vor sich geht.
- Warum sollte das Limit pro Worker unter dem OS-Limit liegen?
- Wie finde ich heraus, wo mein Limit jetzt liegt?
Update : Sowohl für Root als auch für einen normalen Benutzer gibt ulimit "unbegrenzt" aus, ABER ulimit -Hn
und ulimit -Sn
beide geben 1024 aus
setsebool -P httpd_setrlimit 1
damit nginx über die Berechtigung zum Festlegen des Grenzwerts verfügt.Ich muss die Quelle überprüfen, um ehrlich zu sein, aber sie ist ziemlich niedrig.
Ich habe verwendet
worker_rlimit_nofile 15000;
und hatte keine Probleme, Sie können es sicher erhöhen, aber die Wahrscheinlichkeit, dass die Dateideskriptoren ausgehen, ist winzig.quelle