Trop de fichiers ouverts avec nginx, ne semblent pas augmenter la limite


22

Le serveur est Ubuntu 13.04 (GNU / Linux 3.9.3-x86_64-linode33 x86_64).

nginx est nginx / 1.2.6.

Je travaille sur cela depuis plusieurs heures maintenant, alors voici ce que je reçois et voici ce que j'ai fait.

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 en cours d'exécution:

geuis@localhost:~$ 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

Limites logicielles / matérielles modifiées dans /etc/security/limits.conf (paramètres à la fin du fichier)

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

Une lecture des fichiers max

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

Et dans /etc/pam.d/common-session:

session required pam_limits.so

Avec cela ajouté et le serveur redémarré pour faire bonne mesure, pour nginx, je compte les limites logicielles / matérielles en obtenant le PID du processus parent et:

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

Le processus parent s'exécute en tant que «racine» et les 4 travailleurs s'exécutent en tant que «personne».

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

J'ai essayé tout ce que je sais faire et j'ai pu obtenir de Google. Je ne peux pas augmenter les limites de fichiers pour nginx.

Aidez-moi?

Réponses:


32

Ajoutez la ligne suivante à votre nginx et redémarrez le processus:

worker_rlimit_nofile 30000;

Cela permettra aux travailleurs de prendre plus de fichiers. Vous pouvez ensuite vérifier avec:

su - nobody
ulimit -Hn
ulimit -Sn

Cela devrait produire les nouvelles limites matérielles / logicielles.

Référence


6
Si vous modifiez uniquement le worker_rlimit_nofileparamètre uWSGI et non les limites du système (ce qui a fonctionné pour moi), vous ne pouvez pas le vérifier via ulimit. Au lieu de cela, vous devriez regarder directement /proc/<pid of worker>/limits.
Jan Fabry

Je pense que l'utilisateur (personne / www-data) doit se déconnecter et se reconnecter. redémarrez le serveur. ulimit pour moi montre que son augmentation, mais le processus est toujours limité selon cat / proc / {pid} / limits
felix

@felix L'OP a mentionné qu'ils avaient déjà redémarré le serveur, mais oui, c'est nécessaire.
Nathan C

3

Dans Ubuntu, éditez /etc/pam.d/su ajoutez ou décommentez la session de ligne requise pam_limits.so

De plus, dans /etc/security/limits.conf, assurez-vous d'avoir des TABS entre les caractères et non les espaces.


1

assurez-vous d'exécuter la commande suivante après avoir modifié ces fichiers

sysctl -p

Redémarrez ensuite nginx


1
N'a aucun effet. Les limites sont restées les mêmes.
Geuis
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.