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?

Geuis
la source

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

Nathan C
la source
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.

Rusty Hodge
la source
1

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

sysctl -p

Redémarrez ensuite nginx

Mike
la source
1
N'a aucun effet. Les limites sont restées les mêmes.
Geuis