J'ai besoin de me débarrasser de l'ennuyeuse limite "Trop de fichiers ouverts dans le système" sur OS X 10.7.1.
Y a-t-il un moyen ?
J'ai besoin de me débarrasser de l'ennuyeuse limite "Trop de fichiers ouverts dans le système" sur OS X 10.7.1.
Y a-t-il un moyen ?
Selon cet article utile (dont je recommande la lecture) :
Par défaut, le nombre maximal de fichiers que Mac OS X peut ouvrir est défini comme suit est fixé à 12 288 et le nombre maximum de fichiers qu'un processus donné peut ouvrir est 10,240.
Vous pouvez les vérifier avec :
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Vous pouvez augmenter les limites (à vos propres risques) avec :
sysctl -w kern.maxfiles=20480
(ou le nombre que vous choisissez)sysctl -w kern.maxfilesperproc=18000
(ou le nombre que vous choisissez)Pour rendre le changement permanent, utilisez sudo
pour mettre vos paramètres dans /etc/sysctl.conf
(que vous devrez peut-être créer), comme ceci :
kern.maxfiles=20480
kern.maxfilesperproc=18000
Note : Dans OS X 10.10 ou inférieur, vous pouvez ajouter le paramètre dans /etc/launchd.conf
comme limit maxfiles
et ça remplacera tout ce que vous mettez ici.
Encore une fois, d'après l'article :
Une fois que vous avez fait cela, le noyau lui-même aura un nombre maximum de fichiers fichiers mais le Shell pourrait ne pas en avoir. Et puisque la plupart des processus qui prendront ce nombre de fichiers vont être initiés par le Shell vous allez vous voudrez l'augmenter.
La commande pour cela est :
ulimit -S -n 2048 # or whatever number you choose
Cette modification est également temporaire ; elle ne dure que pour la session Shell actuelle. Vous pouvez l'ajouter à votre fichier de configuration Shell ( .bashrc
, .zshrc
ou autre) si vous voulez qu'il s'exécute chaque fois que vous ouvrez un Shell.
Il semble qu'il existe une méthode entièrement différente pour modifier la limite de fichiers ouverts pour chaque version d'OS X !
Pour OS X Sierra (10.12.X) vous devez :
1. Créez un fichier à /Library/LaunchDaemons/limit.maxfiles.plist
et collez ce qui suit (n'hésitez pas à modifier les deux chiffres (qui sont respectivement les limites douce et dure) :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxfiles</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>64000</string>
<string>524288</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
2. Changez le propriétaire de votre nouveau fichier :
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
3. Chargez ces nouveaux paramètres :
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. Enfin, vérifiez que les limites sont correctes :
launchctl limit maxfiles
L'autre option peut être de trouver le coupable :
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
Pour le dernier, vous pouvez voir quels fichiers sont ouverts :
sudo lsof -n | grep socketfil
Et tuer le processus si on le souhaite
kill $pid
Dans les commentaires :
Pour ce que ça vaut, vous pouvez aussi obtenir une liste des ID de processus avec le plus de fichiers ouverts en utilisant
lsof -n +c 0 | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
Vous devrez augmenter vos paramètres ulimit - ils sont plutôt bas sur OS X ces jours-ci - 256 par défaut. Ajouter ulimit -n 4096
ou similaire à votre ~/.profile ou équivalent et cela résoudra le problème dans votre environnement local. Exécutez ulimit -a
pour vérifier vos niveaux actuels
Pour voir les paramètres du système, exécutez ceci :
launchctl limit maxfiles
Dans Lion, il est fixé à un niveau beaucoup plus élevé (10240) par processus qu'auparavant. Mais si vous rencontrez toujours des difficultés à ce niveau, vous pouvez l'augmenter en utilisant la même commande avec les niveaux souhaités. Pour rendre les changements permanents, vous devez ajouter les lignes correspondantes dans le fichier /etc/launchd.conf.
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.
4 votes
Voulez-vous expliquer plus en détail quand cela se produit ? Dans quelles circonstances ?
1 votes
@slhck - J'ai le même problème. Les circonstances sont essentiellement "au hasard". Je suis un développeur, donc j'utilise mon Mac de manière assez intensive : j'exécute une ou plusieurs bases de données, un serveur web, des outils de test, un ou plusieurs navigateurs et un lecteur de musique en même temps. Google Chrome semble être un programme qui a beaucoup de fichiers ouverts.
2 votes
En fait, mon "utilisation intensive" n'était pas le problème ; mes paramètres pour le nombre maximum de fichiers ouverts pour le noyau et par processus étaient bien inférieurs à ce que les valeurs par défaut devraient être.
3 votes
Si vous avez lu le commentaire de Nathan et que vous vous êtes demandé pourquoi il n'a pas donné de détails sur les valeurs par défaut, c'est parce qu'il a tout expliqué dans sa réponse, ci-dessous. (Belle réponse ! :)
0 votes
Je suis dans les mêmes circonstances d'utilisation que Nathan Long, et j'ai trouvé que redémarrer Apache était la seule étape qui "résolvait" le problème. J'ai appliqué toutes les augmentations de limite ci-dessous, mais elles n'ont pas aidé immédiatement. J'exécute les tests phpUnit en ligne de commande > le serveur selenium > firefox > apache > php > mysql, le tout sur le même macbook. Cela fonctionnait bien jusqu'à ce que je passe à Mavericks. L'erreur que j'obtiens est dans la webapp testée, c'est-à-dire que c'est php/apache qui manque de fichiers, donc vraisemblablement pas contrôlé par le paramètre Shell.
0 votes
Vous avez mentionné que vous êtes un développeur ; indépendamment des valeurs par défaut, cela peut également se produire si un programme ouvre des fichiers et laisse les poignées de fichiers ouvertes. Assurez-vous que le logiciel que vous développez ferme correctement chaque fichier qu'il ouvre après l'avoir utilisé.
0 votes
Dans mon cas, j'ai fermé et rouvert le Terminal. Le problème a disparu.