it-swarm.com.de

Zu viele geöffnete Dateien mit Nginx scheinen das Limit nicht zu erhöhen

Der Server ist Ubuntu 13.04 (GNU/Linux 3.9.3-x86_64-linode33 x86_64).

nginx ist nginx/1.2.6.

Ich arbeite jetzt seit einigen Stunden daran, also bekomme ich Folgendes und Folgendes habe ich getan.

tail -f /usr/local/nginx/logs/error.log
2013/06/18 21:35:03 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:05 [crit] 3426#0: accept4() failed (24: Too many open files)

Nginx läuft:

[email protected]:~$ ps aux | grep nginx
root      3422  0.0  0.0  39292   380 ?        Ss   21:30   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    3423  3.7 18.8 238128 190848 ?       S    21:30   0:13 nginx: worker process      
nobody    3424  3.8 19.0 236972 192336 ?       S    21:30   0:13 nginx: worker process      
nobody    3426  3.6 19.0 235492 192192 ?       S    21:30   0:13 nginx: worker process      
nobody    3427  3.7 19.0 236228 192432 ?       S    21:30   0:13 nginx: worker process      
nobody    3428  0.0  0.0  39444   468 ?        S    21:30   0:00 nginx: cache manager process

Geänderte Soft/Hard-Grenzwerte in /etc/security/limits.conf (Einstellungen am Ende der Datei)

root soft  nofile 65536
root hard  nofile 65536

www-data soft nofile 65536
www-data hard nofile 65536

nobody soft nofile 65536
nobody hard nofile 65536

Ein Lesen der maximalen Dateien

cat /proc/sys/fs/file-max
500000

Und in /etc/pam.d/common-session:

session required pam_limits.so

Nachdem dies hinzugefügt und der Server aus gutem Grund neu gestartet wurde, zähle ich für Nginx die Soft/Hard-Grenzwerte, indem ich die PID des übergeordneten Prozesses erhalte und:

cat /proc/<PID>/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 4096                 files     

Der übergeordnete Prozess wird als "root" und die 4 Worker als "none" ausgeführt.

root      2765  0.0  0.0  39292   388 ?        Ss   00:03   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    2766  3.3 17.8 235336 180564 ?       S    00:03   0:21 nginx: worker process      
nobody    2767  3.3 17.9 235432 181776 ?       S    00:03   0:21 nginx: worker process      
nobody    2769  3.4 17.9 236096 181524 ?       S    00:03   0:21 nginx: worker process      
nobody    2770  3.3 18.3 235288 185456 ?       S    00:03   0:21 nginx: worker process      
nobody    2771  0.0  0.0  39444   684 ?        S    00:03   0:00 nginx: cache manager process

Ich habe alles versucht, was ich kann, und konnte es von Google bekommen. Ich kann nicht bekomme die Dateilimits für Nginx zu erhöhen.

Hilfe?

22
Geuis

Fügen Sie Ihrem Nginx die folgende Zeile hinzu und starten Sie den Prozess neu:

worker_rlimit_nofile 30000;

Dadurch können die Mitarbeiter mehr Dateien übernehmen. Sie können dann überprüfen mit:

su - nobody
ulimit -Hn
ulimit -Sn

Dies sollte die neuen Hard/Soft-Grenzwerte ausgeben.

Referenz

32
Nathan C

Bearbeiten Sie in Ubuntu /etc/pam.d/su und fügen Sie die für pam_limits.so erforderliche Zeilensitzung hinzu oder kommentieren Sie sie aus

Stellen Sie außerdem in /etc/security/limits.conf sicher, dass TABS zwischen den Zeichen und keine Leerzeichen stehen.

3
Rusty Hodge

stellen Sie sicher, dass Sie den folgenden Befehl ausführen, nachdem Sie diese Dateien bearbeitet haben

sysctl -p

Starten Sie dann nginx neu

1
Mike