249 votes

Existe-t-il un correctif pour l'erreur "Too many open files in system" sous OS X 10.7.1 ?

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 ?

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.

272voto

Rohan Monga Points 440

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.

74voto

luis Points 111

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

46voto

user16120 Points 619

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

40voto

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.

13voto

Clustermagnet Points 399

Les amis, sur Mavericks 10.9.4

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

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