Comment définir une nofile limite pour éviter “de nombreux fichiers ouverts” erreur?
J'ai un websocket service. c'est strage qui ont d'erreur:"trop de fichiers ouverts", mais j'ai mis la configuration système:
/etc/security/limits.conf
* soft nofile 65000
* hard nofile 65000
/etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65000
ulimit -n
//output 6500
Donc je pense que mon système de configurer la droite.
Mon service est gérer par le superviseur, il est possible superviseur limites?
processus de vérification de commencer par le superviseur:
cat /proc/815/limits
Max open files 1024 4096 files
processus de vérification de démarrage manuel:
cat /proc/900/limits
Max open files 65000 65000 files
La raison est utilisé superviseur de gérer le service. si je redémarre le superviseur et le redémarrage de l'enfant, il est "max ouvrir les fichiers" ok(65000), mais mal(1024) lorsque le redémarrage du système superviseur de démarrer automatiquement.
Peut être superviseur de niveau de démarrage est trop élevé et la configuration système ne fonctionne pas lorsque le superviseur de commencer?
edit:
système: ubuntu 12.04 64 bits
Ce n'est pas le superviseur de problème, tous les processus de démarrage automatique après redémarrage du système ne sont pas utiliser de configuration système(max ouvrir les fichiers=1024), mais le redémarrage c'est ok.
mise à jour
Peut-être le problème est:
- https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/938669
- http://bryanmarty.com/blog/2012/02/10/setting-nofile-limit-upstart/
- Augmenter max des fichiers ouverts pour Ubuntu/Upstart (initctl)
Maintenant, la question est, comment définir une nofile limite parce que je ne veux pas définir nofile limite dans chaque classe de script dont j'ai besoin.
- essayez de définir
fs.file-max
dans/etc/sysctl.conf
si vous ne souhaitez pas définirlimit nofile
dans chaque classe de script. - Connexes: Trop de fichiers ouverts - comment faire pour trouver le coupable.
Vous devez vous connecter pour publier un commentaire.
Résolu ce problème en définissant les limites pour tous les utilisateurs dans le fichier :
REDÉMARRER LE SERVEUR après la mise à l'limites.
TRÈS IMPORTANT:
Le
/etc/security/limits.d/
dossier contenant l'utilisateur des limites précises. Dans mon cas, hadoop 2 (cloudera) limites liées. Ces spécifique à l'utilisateur, les limites de l'emporterait sur la limite globale donc, si vos limites ne sont pas appliqués, assurez-vous de vérifier à l'utilisateur des limites précises dans le dossier/etc/security/limits.d/
et dans le fichier/etc/security/limits.conf
.ATTENTION:
Configuration spécifique à l'utilisateur des limites est le chemin à parcourir dans tous les cas. Réglage de la global (*) limite doit être évitée. Dans mon cas, c'était un environnement isolé et juste nécessaire pour éliminer le fichier des limites d'émission à partir de mon expérience.
Espère que cela sauve quelqu'un un sèche - que j'ai passé trop de temps en tirant mes cheveux morceau par morceau!
J'ai eu le même problème. Même si
ulimit -Sn
montre ma nouvelle limite, l'exécution desupervisorctl restart all
etcat
ing le proc fichiers n'ont pas montré les limites nouvelles.Le problème est que
supervisord
a encore les limites d'origine. Par conséquent, tous les processus enfants, il crée toujours l'original limites.Donc, la solution est de tuer et de redémarrer
supervisord
.Essayez de modifier /etc/sysctl.conf et d'ajuster les limites à l'échelle mondiale
Par exemple:
Forces de la limite de 100000 fichiers.
Ajouter:
Enregistrez et fermez le fichier. Les utilisateurs ont besoin de se déconnecter et de se reconnecter à nouveau pour les changements prennent effet ou il suffit de taper la commande suivante:
À tout fatigué googlers: vous pourriez être à la recherche pour le
minfds
paramètre dans le superviseur de la config. Ce paramètre semble prendre effet pour la supervisord processus ainsi que les enfants. J'ai eu un certain nombre d'autres stratégies, dont le lancement d'un script shell qui établissent les limites avant l'exécution du programme, mais c'était la seule chose qui a fonctionné.Vous pouvez vous trouver de limite:
ou
sysctl -a | grep file
modifier dans /proc/sys/fs/file-max dossier ou avec:
luqmaan réponse était le billet pour moi, sauf pour une petite mise en garde: l'
*
générique ne s'applique pas à la racine de Ubuntu (comme décrit danslimits.conf
commentaires).Vous devez définir explicitement la limite de la racine si
supervisord
est lancé en tant qu'utilisateur root:vi /etc/security/limits.conf
Que vous pouvez définir la limite de Service sur cette voie:
ajouter:
LimitNOFILE=65536
dans:
/etc/systemd/system/{NameofService}.service
Je pense que cela n'a rien à faire avec des fichiers ouverts(C'est juste un mauvais message d'erreur). N'importe quel port que votre application utilise en cours d'utilisation.
1. Essayez de trouver l'ID de processus avec la commande
2. Tuer le processus (par exemple 8572) avec la commande
3. Démarrez votre application à nouveau.