web-dev-qa-db-fra.com

Existe-t-il un correctif pour l’erreur "Trop de fichiers ouverts dans le système" sous OS X 10.7.1?

Je dois me débarrasser de la limite "Trop de fichiers ouverts dans le système" sur OS X 10.7.1.

Y a-t-il un moyen?

176
John Wilund

Selon cet article utile (que je recommande de lire):

Par défaut, le nombre maximal de fichiers que Mac OS X peut ouvrir est défini sur 12 288 et le nombre maximal de fichiers qu'un processus donné peut ouvrir est de 10 240.

Vous pouvez les vérifier avec:

  • sysctl kern.maxfiles
  • sysctl kern.maxfilesperproc

Vous pouvez augmenter les limites (à vos risques et périls) 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 la modification permanente, utilisez Sudo pour définir vos paramètres dans /etc/sysctl.conf (que vous devrez peut-être créer), comme ceci:

kern.maxfiles=20480
kern.maxfilesperproc=18000

Remarque: sous OS X 10.10 ou version antérieure, vous pouvez ajouter un paramètre dans /etc/launchd.conf tel que limit maxfiles.

Encore une fois, de l'article:

Une fois que cela est fait, le noyau lui-même aura un nombre maximum de fichiers, mais pas le shell. Et comme la plupart des processus qui vont utiliser autant de fichiers vont être lancés par le shell, vous voudrez augmenter ce nombre.

La commande pour cela est:

ulimit -S -n 2048 # or whatever number you choose

Ce changement est également temporaire; cela ne dure que pour la session Shell en cours. Vous pouvez l'ajouter à votre fichier de configuration du shell (.bashrc, .zshrc ou autre) si vous voulez qu'il s'exécute à chaque fois que vous ouvrez un shell.

218
Nathan Long

Il semble qu'il existe une méthode totalement 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 le texte suivant dans (n'hésitez pas à modifier les deux nombres (qui correspondent respectivement aux limites logicielles et matérielles):

<?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
59
ninjaPixel

Vous devrez augmenter vos paramètres ulimit - il est plutôt faible sous OS X de nos jours - 256 par défaut. Ajoutez ulimit -n 4096 ou similaire à votre ~/.profile ou équivalent et cela le résoudra dans votre environnement local. Exécutez ulimit -a pour vérifier vos niveaux actuels

Pour voir les paramètres du système, lancez ceci:

launchctl limit maxfiles

Il est beaucoup plus élevé dans Lion (10240) qu'auparavant par processus. Mais si vous le frappez toujours là, vous pouvez le régler plus haut en utilisant la même commande avec les niveaux souhaités. Pour que les modifications soient permanentes, vous devez ajouter les lignes appropriées dans /etc/launchd.conf.

31
Adam C

Une 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 tuez le processus si vous le souhaitez

kill $pid

D'après les commentaires:

Pour ce que cela vaut, vous pouvez également obtenir une liste des ID de processus avec les fichiers les plus ouverts à

lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
26
sanmai

Les gens, sur Mavericks 10.9.4

ulimit -n 2048 fonctionne bien. Vous devrez peut-être lancer une nouvelle session de connexion.

9
Clustermagnet

Pour le dernier macOS (au moment de l'écriture: 10.14.1), vous pouvez utiliser Sudo launchctl limit maxfiles 64000 524288 (par défaut, il était de 256), mais cela ne fonctionne que dans la session en cours. Utilisez le travail launchctl de @ninjaPixel ( https://superuser.com/a/1171028/760235 ) pour une solution permanente.

2
Dzmitry Hubin

Après toutes les modifications ci-dessus, mon Java n'a pas généré plus de 10000 fichiers. La solution était ce drapeau jvm -XX: -MaxFDLimit

1
Uros Velickovic

Tu peux courir

lsof -n

quel processus ouvrir trop de fichiers.

alors tuez-le.

ou

sysctl -w kern.maxfiles=20480

changez-le en un plus grand.

1
SaintKnight

Je l'ai rencontré alors que je faisais un chmod -R alors je l'ai fait en prenant de plus petites étapes, par exemple.

# for each directory
find . -type d -exec chmod 755 {} \;
0
Michael