Je suis récemment passé de Mavericks à Yosemite ...
Je suis presque sûr que mon problème réside dans le nombre de fichiers que je peux ouvrir - mais je ne suis pas sûr de savoir comment résolvez-le . Je suis également presque sûr d'avoir lu chaque article/conseil relatif à la création des fichiers /etc/sysctl.conf
et /etc/launchd.conf
.
Pour des raisons de clarté, c’est à quoi ressemblent tous les deux n.b. (Je ne suis même pas sûr que ce soient les bonnes commandes pour les insérer - j'ai essayé à peu près tout et toutes les combinaisons. C'est-à-dire: des valeurs plus élevées, des valeurs plus basses, supprimer des commandes, ajouter des commandes)
/etc/launchd.conf
limit maxfiles 16384 32768
limit maxproc 1000 2000
/etc/sysctl.conf
# Turn up maxproc
kern.maxproc=2048
# Turn up the maxproc per user
kern.maxprocperuid=512
J'ai également essayé d'augmenter mes valeurs ulimit - à la fois globalement et localement pour ma session en cours ... no bueno
ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-v: address space (kbytes) unlimited
-l: locked-in-memory size (kbytes) unlimited
-u: processes 709
-n: file descriptors 4096
Ok - c’est là que ma migraine a commencé… Ma base de données (percona-server 5.6.21-69.0 installée via homebrew) a commencé à s’étouffer et à mourir, et dans le fichier mysql-error.log, elle était remplie avec l’erreur too many files open
.
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorder_products.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorders.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsdevices.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsracks.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/v_classunity_classlist.frm' (errno: 24 - Too many open files)
2014-10-21 15:20:48 5190 [ERROR] Error in accept: Too many open files
C’est là que j’ai commencé à essayer de résoudre ce problème en "améliorant" mes fichiers ulimit, maxfiles, maxproc, etc ...
Finalement - frustré, je suis passé et reviendrais sur cette question plus tard. Alors, j’essayais de Sudo gem install nokogiri
et échouais et répète sans cesse cette même erreur (beaucoup de répétitions à propos de builder.rb, échec de la construction de l’extension gem native - suivi de plusieurs empilements répétés Logs Gist
nokogiri Erreurs d'installation
J'ai essayé/cherché plusieurs approches différentes pour résoudre ce problème (exemple: drapeaux supplémentaires, etc.). Ce qui est étonnant - et quand j'ai commencé à penser que ce problème était lié au nombre de fichiers/processus ouverts, c’est quand j’ai vérifié top
pendant l’installation de la gemme .... j’ai été assez surpris de voir ce que j’ai trouvé.
top pendant gem install nokogiri
Il semble que mon processus continue à se bricoler, ce qui était alors logique pour cette ligne ONE dans ma photo précédente (voir "nokogiri install errors picture")
sh: fork: Resource temporarily unavailable
Donc, je suis un peu à court d’idées, mais je ne sais plus trop comment déboguer le nombre de fichiers?
UPDATE
Eh bien, j'ai réussi à installer le nokogiri. Malheureusement, je ne suis pas tout à fait sûr de ce qui a été résolu, car j'ai essayé tant de choses. Mais je pense qu’il a fallu faire face à la réinstallation de Ruby. Cependant, je continue à avoir le même problème avec ma base de données qui se plaint d'un trop grand nombre de fichiers ouverts lorsque j'utilise une base de données non triviale.
La modification du /etc/launchd.conf
dans un grand nombre de requêtes Google et de SO suggestions ne semblait pas fonctionner pour moi dans Yosemite (10.10). Après de nombreuses combinaisons de modifications/redémarrages/tests, ce qui a finalement fonctionné a été de modifier (ou de créer s'il n'existait pas) le fichier /etc/sysctl.conf
.
C'est ce que j'ai dû mettre pour que ça marche
kern.maxfiles=65536
kern.maxfilesperproc=65536
Je ne suis pas sûr que kern.maxfiles
doive être dedans, mais quand je l'ai eu dedans tout seul, j'ai toujours le même problème, quand j'ai ajouté le kern.maxfilesperproc
, tout a commencé à fonctionner.
Pour ajuster les limites de fichiers ouverts sur l'ensemble du système sous Mac OS X Yosemite, vous devez créer deux fichiers de configuration. Le premier est un fichier de liste de propriétés (appelé 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>65536</string>
<string>65536</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
La limite de fichiers ouverts sera fixée à 65536. Le deuxième fichier de configuration de la liste de plis 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 disposer des autorisations -rw-r--r--
. Ces autorisations doivent être en place par défaut, mais vous pouvez vous assurer qu'elles le sont en exécutant Sudo chmod 644 <filename>
. Bien que les étapes expliquées ci-dessus entraînent la définition correcte des limites de fichiers ouverts sur l'ensemble du système 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 définir également au niveau de la session en ajoutant les lignes suivantes à votre fichier bashrc
, bashprofile
ou analogue:
ulimit -n 65536
ulimit -u 2048
Comme les fichiers plist, votre fichier bashrc ou similaire devrait avoir les 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é défini sur 65536.
Source: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/
Les valeurs par défaut sur Yosemite semblent être de 12K et 10K:
$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240
Seul le réglage de kern.maxfiles
dans /etc/sysctl.conf
semble avoir résolu mes problèmes. /etc/sysctl.conf
fichier:
kern.maxfiles=24576