Question 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 fastidieuse "Trop de fichiers ouverts dans le système" sous OS X 10.7.1.

Y a-t-il un moyen?


150
2018-06-07 08:52


origine


Voulez-vous expliquer davantage quand cela se produit? Dans quelles circonstances? - slhck
@slhck - J'ai le même problème. Les circonstances sont fondamentalement "au hasard". Je suis développeur et j'utilise donc mon Mac assez lourdement: exécuter une ou plusieurs bases de données, un serveur Web, des outils de test, un ou plusieurs navigateurs et un lecteur de musique en une fois. Google Chrome semble être un programme qui a beaucoup de fichiers ouverts. - Nathan Long
En fait, mon "usage intensif" n'était pas le problème; mes paramètres pour le nombre maximal de fichiers ouverts pour le kernal et le par-process étaient bien inférieurs à ceux par défaut. - Nathan Long
Si vous lisez le commentaire de Nathan et que vous vous demandez pourquoi il n’a pas inclus de détails sur les défauts, c’est parce qu’il a tout expliqué dans sa réponse ci-dessous. (Bonne réponse! :) - Olie
Je suis dans la même situation d'utilisation que Nathan Long, et j'ai trouvé que le redémarrage d'Apache était la seule étape qui «résolvait» le problème. J'ai appliqué toutes les augmentations de la limite ci-dessous mais elles n'ont pas aidé immédiatement. Je suis en train de lancer des tests phpUnit en ligne de commande> selenium server> firefox> apache> php> mysql sur le même macbook. Utilisé pour bien fonctionner jusqu'à ce que je mette à niveau vers les non-conformistes. L'erreur que je reçois réside dans l'application Web en cours de test, c'est-à-dire que PHP / Apache est à court de fichiers, donc probablement non contrôlé par le paramètre shell. - scipilot


Réponses:


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.   à 12,288 et le nombre maximal 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 risques et périls) avec:

  • sysctl -w kern.maxfiles=20480 (ou quel que soit le nombre que vous choisissez)
  • sysctl -w kern.maxfilesperproc=18000 (ou quel que soit le nombre que vous choisissez)

Pour rendre le changement permanent, utilisez sudo mettre 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 inférieur, vous pouvez ajouter des paramètres dans /etc/launchd.conf comme limit maxfiles et il remplacera tout ce que vous mettez ici.

Encore une fois, à partir de l'article:

Une fois cela fait, le noyau lui-même aura un nombre maximum de   fichiers mais le shell peut ne pas. Et puisque la plupart des processus prendront   autant de fichiers vont être initiés par le shell que vous êtes   Je veux augmenter ça.

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 shell (.bashrc, .zshrc ou autre) si vous voulez qu’il s'exécute chaque fois que vous ouvrez un shell.


198
2018-06-29 20:23



Quelle limite s'applique aux processus lancés en cliquant sur les icônes dans la zone de lancement? Et comment changer cette limite? Lorsque vous dites "shell", je suppose que vous voulez dire un shell terminal interactif. - Cheeso
@Cheeso - I pense que la limite globale du système (sysctl) ou la limite de lancement, selon celle qui est la plus faible, contrôle cela. - Nathan Long
créer un fichier /etc/launchd.conf avec un contenu limité maxfiles 1000000 1000000 a fonctionné parfaitement pour moi! (OSX 10.8.2 ici) - Zugwalt
je mets kern.maxfiles=65000 kern.maxfilesperproc=65000 dans /etc/sysctl.conf et redémarré. kern.maxfiles a été ignoré et est resté la valeur par défaut, mais kern.maxfilesperproc a été défini sur 65000. Je n'ai pas /etc/launchd.conf alors quoi de neuf? - pferrel
Si quelqu'un a des problèmes avec les fichiers max qui ne collent pas, c'est parce qu'il y a un espace après la ligne maxfiles, qui doit être supprimé. - jjathman


Il semble qu'il existe une méthode totalement différente pour modifier la limite des fichiers ouverts pour chaque version d'OS X!

Pour OS X Sierra (10.12.X) vous devez:

1. Créer un fichier à /Library/LaunchDaemons/limit.maxfiles.plist et collez les éléments suivants dans (n'hésitez pas à modifier les deux nombres (qui sont respectivement les limites souples et les limites strictes):

<?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. Changer 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

51
2018-01-24 14:56



travaillé parfaitement, merci! Dans mon cas, l'erreur s'est manifestée dans un processus Java avec le message IO Error: Bad file descriptor (Write failed) - agradl
Fonctionne également sur El Capitan 10.11.6 - Troy Daniels
ne peut toujours pas changer le ulimit pour shell. Le maximum reste 1024 ce que je fais - DataGreed
A l'étape 2, exécutez: sudo chmod 600 /Library/LaunchDaemons/limit.maxfiles.plist sudo chown root /Library/LaunchDaemons/limit.maxfiles.plist - Hai Nguyen


Vous devrez augmenter vos paramètres ulimit - il est actuellement assez faible sous OS X - 256 par défaut. Ajouter ulimit -n 4096 ou similaire à votre ~ / .profile ou équivalent et qui le résoudra dans votre environnement local. Courir ulimit -a pour vérifier vos niveaux actuels

Pour voir les paramètres du système, exécutez ceci:

launchctl limit maxfiles

Il est un peu plus élevé dans Lion (10240) par processus qu’avant. Mais si vous le frappez encore, vous pouvez le régler plus haut en utilisant la même commande avec les niveaux souhaités. Pour apporter les modifications permanentes /etc/launchd.conf est l'endroit où vous devez ajouter les lignes pertinentes.


29
2018-06-07 11:09



256? C'est 2560 descripteurs de fichiers pour moi et je ne les ai jamais changés. La limite est de 266 processus (c.f. ulimit -a). - slhck
Même chose pour moi, 256 fichiers sur MacOS X Maverick - Climbatize
256 sur OS X Yosemite aussi - Alexander
256 sur El Capitan aussi. - TMN
256 dans Yosemite. - Jaec


Une autre option pourrait ê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 identifiants de processus avec les fichiers les plus ouverts en utilisant

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

17
2018-02-18 00:42



Utile! Mais trier sur OS X (10.11) ne prend pas -h. (Peut-être que -g?) - Robert Calhoun
Pour moi a bien fonctionné juste sans -h (OS X 10.12.3): sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail - vearutop
Ainsi soit-il sans -h - sanmai
C'est la seule réponse qui m'a aidé à trouver la cause de mon problème .. merci :) - SgtPooki
Pour ce que cela vaut, vous pouvez également obtenir une liste des identifiants de processus avec les fichiers les plus ouverts en utilisant lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail. - Chris Frederick


Folks, sur Mavericks 10.9.4

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


9
2017-09-04 16:19





Je l'ai rencontré en faisant un chmod -R donc je l'ai eu en prenant des mesures plus petites, par ex.

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

0
2017-12-14 18:50



Bien que cela puisse être un remède, il ne semble pas réellement répondre à la question. Peut-être qu'expliquer que vous ne pouvez pas vous débarrasser du message et le proposer comme un moyen de le rendre moins problématique améliorerait votre réponse. - music2myear


Tu peux courir

lsof -n

ce processus ouvre trop de fichiers.

alors tuez-le.

ou

sysctl -w kern.maxfiles=20480

changez-le en plus grand.


0
2018-05-18 02:52



Veuillez expliquer en quoi cette réponse diffère de celles déjà données. - Stephen Rauch