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 ?
Pour la dernière version de macOS (au moment de la rédaction : 10.14.1), vous pouvez utiliser sudo launchctl limit maxfiles 64000 524288
(par défaut, elle est de 256), mais elle ne fonctionne que dans la session en cours. Utilisez launchctl
job de @ninjaPixel ( https://superuser.com/a/1171028/760235 ) pour une solution permanente.
Similaire à https://superuser.com/a/1171028/367819
Pour vérifier les limites actuelles sur votre système Mac OS X, exécutez :
launchctl limit maxfiles
Les deux dernières colonnes sont respectivement les limites douce et dure.
Pour ajuster les limites de fichiers ouverts à l'échelle du système dans Mac OS X Yosemite, vous devez créer deux fichiers de configuration. Le premier est un fichier de liste de propriétés (aka plist) dans /Library/LaunchDaemons/limit.maxfiles.plist qui contient la configuration XML suivante :
<?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>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
Ceci fixera la limite des fichiers ouverts à 200000. Le deuxième fichier de configuration plist doit être stocké dans /Library/LaunchDaemons/limit.maxproc.plist avec le contenu suivant :
<?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.maxproc</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxproc</string>
<string>2048</string>
<string>2048</string>
</array>
<key>RunAtLoad</key>
<true />
<key>ServiceIPC</key>
<false />
</dict>
</plist>
Les deux fichiers plist doivent appartenir à root:wheel et avoir les permissions -rw-r--r--. Ces permissions devraient être en place par défaut, mais vous pouvez vous en assurer en exécutant sudo chmod 644 . Bien que les étapes expliquées ci-dessus fassent en sorte que les limites de fichiers ouverts à l'échelle du système soient correctement définies au redémarrage, vous pouvez les appliquer manuellement en exécutant launchctl limit.
En plus de définir ces limites au niveau du système, nous vous recommandons de les définir également au niveau de la session en ajoutant les lignes suivantes à votre fichier bashrc, bashprofile ou analogue :
ulimit -n 200000
ulimit -u 2048
Comme pour les fichiers plist, votre bashrc ou un fichier similaire doit avoir des permissions -rw-r--r--. À ce stade, vous pouvez redémarrer votre ordinateur et entrer ulimit -n dans votre terminal. Si votre système est configuré correctement, vous devriez voir que maxfiles a été fixé à 200000.
Vous pouvez suivre cet article pour plus de détails.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
N'oubliez pas de redémarrer votre Mac pour que les valeurs soient effectives.
L'augmentation du nombre de fichiers autorisés en lecture et en écriture ne doit jamais être considérée comme une bonne pratique courante.
Comme sanmai et d'autres l'ont suggéré, vous pouvez simplement essayer de tuer certains processus envahissants. Probablement ceux qui sont impliqués dans l'augmentation du nombre de manipulations de fichiers.
1-/ La première étape consiste à récupérer les processus les plus consommateurs de fichiers.
lsof -n +c 0 | cut -f1 -d' ' | uniq -c | sort | tail
2-/ Deuxième étape : utiliser ces noms pour tuer tous les processus qu'ils impliquent. Attention à ne pas tuer systématiquement un processus consommateur de fichiers qui pourrait être indispensable à votre activité actuelle.
ps -e -a |grep file-consuming-process |for i in `awk {'print$1'}`; do kill -9 $i; done
répétez le processus jusqu'à ce que vous ayez tué les démons puissants indésirables.
Amusez-vous bien :)
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.