J'ai un problème avec les fichiers ouverts sous mon Ubuntu 9.10 lors de l'exécution de serveur à Python2.6 Et le principal problème est que je ne sais pas pourquoi .. p>
j'ai défini p>
ulimit -n = 999999 P>
net.core.somaxconn = 999999 P>
fs.file-max = 999999 P>
et lsof me donne environ 12 000 fichiers ouverts lorsque Server est en cours d'exécution. P>
Et aussi j'utilise Epoll. P>
Mais après un certain temps, il commence à donner une exception: p>
fichier "/usr/lib/python2.6/socket.py", ligne 195, dans Accepter ERREUR: [ERRNO 24] Trop de fichiers ouverts p>
Et je ne sais pas comment il peut atteindre la limite de fichier quand il n'est pas atteint. P>
Merci d'aide) P>
3 Réponses :
paramètres qui configurent des connexions opencales maximales.
à /etc/sysctl.confled/proxctl.confaDdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd:
* soft nofile 65535 * hard nofile 65535
Quelle est la fonction de cette limite? Garder un utilisateur malveillant de ...?
Cela limite le nombre de descripteurs ouverts par utilisateur. Donc, si par exemple votre dB mangez tous les descripteurs, votre serveur Web fonctionnera toujours.
Vous pouvez également le faire à partir de votre code Python comme ci-dessous
import resource resource.setrlimit(resource.RLIMIT_NOFILE, (65536, 65536))
La mise à jour aide à expliquer la fonction, mais ma question est de savoir si cela fait un changement permanent ou si je redémarre l'interprète Python, il réinitialisera les limites.
@Michael Le changement est une périmètre de processus. Vous devez définir des limites chaque fois que vous exécutez votre script.
Si vous utilisez Supervisord pour exécuter votre processus, tout mentionné ci-dessus peut ne pas suffire. Cela se produit parce que Supervisord a sa propre configuration pour la limite de fichiers ouverts de ses processus.
on /etc/supervisord.confled/supervisford.confled/superfrefrefre> p> p>
Qu'est-ce que "ulimit -n" revient? Le système vous permet-il réellement de le définir à 999999?
Vous frappez probablement la limite de descripteur de fichier par processus et vous ne notez pas comment vous l'avez modifiée. Voir
/usr/include/linux/limits.h nr_open code> Que faites-vous avec les fichiers ouverts 12K ??
À propos de cette "/usr/include/linux/limits.h nr_open" Je ne savais pas, il a été réglé sur 1024, changé jusqu'à 65536. À propos de "Ulimit -N" C'est le retour 999999 testera maintenant le serveur avec cette nouvelle option NR_OPEN . Et va répondre) merci)
J'ai testé le serveur avec cette nouvelle option et cela fonctionne parfaitement)) Merci beaucoup de l'aide))))))))))))))))))
hm .. a trouvé un comportement étrange de système. J'ai défini toutes les limites à 999999 et Démarrer le serveur. J'ajoute une certaine fonction qui écrit sur le numéro de journal de fichiers ouverts dans le système avec "sysctl fs.file-nr" et "lsof | wc -l", lorsque Server est très chargé, il est très chargé, il donne une erreur 24: trop de fichiers ouverts. Mais le nombre de fichiers ouverts n'est pas plus grand puis 15k. Peut-être qu'il y a une autre limite? ou certains d'entre eux n'ont pas correctement réglé (si oui, comment cela peut être vérifié?)