OS X Yosemite - Trop de fichiers ouverts

18

J'ai récemment passé de Mavericks à Yosemite .... des maux de tête s'ensuivirent

Je suis presque sûr que mon problème réside dans le nombre de fichiers que je peux ouvrir , mais je ne sais pas comment le résoudre . Je suis également sûr d'avoir lu tous les articles / conseils sur la création du /etc/sysctl.conffichier et du /etc/launchd.conffichier

Par souci de clarté, voici à quoi ressemblent actuellement les deux nb (je ne sais même pas si ce sont les bonnes commandes à y mettre plus - j'ai essayé à peu près tout et toutes les combinaisons. Par exemple: des valeurs plus élevées, des valeurs plus faibles , suppression de commandes, ajout de 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 mon mal de tête a commencé initialement ... Ma base de données (percona-server 5.6.21-69.0 installé via homebrew) a commencé à s'étouffer et à mourir, et dans le mysql-error.log, elle a été 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 "augmentant" mes ulimit, maxfiles, maxproc, etc ...

Finalement - frustré, je suis passé à autre chose et reviendrais sur ce problème plus tard. Donc, j'essayais sudo gem install nokogiri encore et encore, cela échouerait et cracherait la même erreur (beaucoup de répétitions sur le constructeur.rb ne parvenant pas à créer l'extension native de gemme - suivies par un tas de stacktraces répétées Logs Gist

Erreurs d'installation de nokogiri erreurs d'installation de nokogiri

J'ai essayé / googlé un tas d'approches différentes pour résoudre ce problème (c'est-à-dire: 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é toppendant l'installation de la gemme .... J'ai été assez surpris de voir ce que j'ai trouvé

haut pendant gem install nokogiri sudo gem install nokogiri

Il semble que mon processus continue de bifurquer, ce qui avait alors du sens pour cette seule ligne dans ma photo précédente (voir "image des erreurs d'installation de nokogiri")

sh: fork: Resource temporarily unavailable

Je suis donc un peu à court d'idées, mais je ne sais plus vraiment comment déboguer le nombre de fichiers?

MISE À JOUR

Eh bien, j'ai réussi à installer nokogiri. Malheureusement, je ne sais pas exactement ce qui l'a corrigé b / c, j'ai essayé tant de choses. Mais je pense qu'il a dû faire face à la réinstallation de rubis. Cependant, je reçois toujours le même problème avec ma base de données se plaignant de trop de fichiers ouverts lorsque j'utilise une sorte de base de données qui n'est pas trivialement petite.

veilig
la source
Hm. Ne devrait probablement pas frapper autant? Peut-être vaut-il aussi la peine de soulever un bug avec les développeurs de cette gemme.
slhck

Réponses:

16

La modification de /etc/launchd.confbeaucoup de requêtes Google et de suggestions SO ne semblait pas fonctionner pour moi dans Yosemite (10.10). Ce qui a fini par fonctionner, après de nombreuses combinaisons de changement / redémarrage / test, a été de modifier (ou de créer s'il n'existe pas) le /etc/sysctl.conffichier.

C'est ce que j'ai dû mettre pour que ça marche

kern.maxfiles=65536
kern.maxfilesperproc=65536

Je ne sais pas s'il kern.maxfilesfaut y être, mais quand je l'ai eu là-dedans, j'ai toujours eu le même problème, quand j'ai ajouté que kern.maxfilesperproctout a commencé à fonctionner.

veilig
la source
J'ai constaté qu'un redémarrage est nécessaire pour que ces variables prennent effet (comme prévu). Vous pouvez confirmer que les valeurs ont changé en faisant sysctl -a | grep kern.maxfiles.
Blake Frederick
8

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) /Library/LaunchDaemons/limit.maxfiles.plistqui 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>

Cela définira la limite de fichiers ouverts à 65536. Le deuxième fichier de configuration plist doit être stocké /Library/LaunchDaemons/limit.maxproc.plistavec 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:wheelet disposer d'autorisations -rw-r--r--. Ces autorisations doivent être en place par défaut, mais vous pouvez vous assurer qu'elles sont en place 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 à l'échelle du système au redémarrage, vous pouvez les appliquer manuellement en exécutant launchctl limit.

En plus de fixer ces limites au niveau du système, nous vous recommandons de régler le au niveau de la session, ainsi par les annexant lignes suivantes à votre bashrc, bashprofileou un fichier analogue:

ulimit -n 65536
ulimit -u 2048

Comme les fichiers plist, votre bashrc ou un fichier similaire doit avoir des -rw-r--r--autorisations. À 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.

Provenant de: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/

Jedateach
la source
1
"launchctl limit maxfiles unlimited unlimited; launchctl limit maxfiles" signale que les maximums sont 10240 sur mon Yosemite 10.10.5 le 2015-09-30, et expérimenter avec eux semble montrer que si vous utilisez un nombre explicite plus grand, ce sera ignoré.
Dave X
5

Les valeurs par défaut sur Yosemite semblent être 12K et 10K:

$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240

Seule la mise kern.maxfilesen place /etc/sysctl.confsemble avoir résolu mes problèmes. /etc/sysctl.conffichier:

kern.maxfiles=24576
Michel
la source
exactement les mêmes valeurs pour sierra
Devin G Rhode
Cependant launchctl limit maxfilesm'a donné ceci:maxfiles 256 unlimited
Devin G Rhode