3 votes

Essayer de résoudre le problème "nginx too many files" (trop de fichiers)

Nous avons récemment commencé à obtenir l'erreur suivante sur l'une de nos boîtes nginx :

2011/05/25 16:35:51 [alert] 3580#0: accept() failed (24: Too many open files)

En vérifiant le fichier /etc/security/limits.conf, nous obtenons ceci :

*                soft    nofile          900000
*                hard    nofile          900000

mais lorsque nous avons fait cat /proc/{pid}/limits, la limite de fichiers était de 1024. Lorsque nous avons redémarré nginx, le problème était résolu et /proc/{pid}/limits affichait 900000. Je pense que cela peut être dû au fait que la machine a été redémarrée et qu'au démarrage, nginx a été lancé avant que les limites ne soient appliquées. Cependant, tout ce que j'ai lu sur le fonctionnement des limites et du pam suggère que ce n'est pas vraiment ainsi que fonctionnent les ulimits. Quelqu'un sait-il ce qui se passe ici ?

Edit : Sorry, should mention os and stuff. Nous fonctionnons sous CentOS avec le noyau 2.6.18-194.26.1.el5, et nginx 1.0.1.

3voto

sjors miltenburg Points 694

Ce rapport de bogue semble confirmer vos premiers soupçons :

Ce n'est pas le bon à la question "comment définir les limites d'un daemon ?" Le fichier /etc/security/limits.d n'est traité que par pam_limits. traité que par pam_limits, qui n'a aucune raison raison d'être dans le chemin d'accès pour le startup.

Lors d'un redémarrage manuel, en revanche, nginx hérite des limites de votre Shell.

La solution : appeler ulimit dans l'initscript de nginx. Vous ne pouvez pas utiliser ulimit -n en tant qu'utilisateur normal, mais le script init script devrait avoir suffisamment de privilèges lorsqu'il est exécuté au démarrage.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X