web-dev-qa-db-fra.com

OS X Yosemite - Trop de fichiers ouverts

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  nokogiri install errors

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 Sudo 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.

18
veilig

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.

16
veilig

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/

8
Jedateach

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
5
Michel