web-dev-qa-db-fra.com

Apache PHP/OSX Mavericks: - Echec de l'ouverture du flux: Trop de fichiers ouverts

J'ai récemment effectué une mise à niveau vers OSX Mavericks et, depuis lors, j'ai commencé à obtenir l'erreur susmentionnée sur ma machine de développement. Il n'y a pas de problème évident dans le code (c'est une application générée automatiquement Yii ). Ce qui s'est passé dans le cadre de la mise à niveau vers Mavericks est le suivant:

  1. PHP a été mis à niveau de la version 5.2.x fournie avec OSX Lion à la version 5.4.x.
  2. Je devais obtenir un débogueur Zend pour PHP 5.4 en installant Zend Server , en récupérant le fichier ZendDebugger.so et en le désinstallant (tout cela car Zend ne fournit pas de version autonome php 5.4.x).

Depuis, je reçois ce problème après avoir peut-être chargé et rechargé le site plusieurs fois. Après cette erreur, mon serveur Web renvoie la même erreur pour toute autre application hébergée sur localhost. Je dois mentionner que les pages Web statiques sont bien servies.

J'ai vu plusieurs discussions sur ce sujet. La plupart soulignent les problèmes de code dans lesquels les descripteurs de fichier ne sont pas fermés correctement, franchissant ainsi le seuil de limite de fichier ouvert. J'ai aussi trouvé ce thread qui semble suggérer que cela pourrait être un problème de débogage de zend. Il y a aussi un rapport de bogue filed pour PHP 5.2.x. En suivant le fil ici , j’ai essayé ce qui suit:

$ ulimit -a

qui rapporte:

open files (-n) 256

Également,

sysctl -a | grep files

résultats,

kern.maxfiles = 12288
kern.maxfilesperproc = 10240
kern.maxfiles: 12288
kern.maxfilesperproc: 10240
kern.num_files: 3248

Un autre intéressant thread suggère d’augmenter cette limite (actuellement 256) en utilisant:

ulimit -n 1024

J'ai tout essayé, mais rien ne semble fonctionner. Le problème n'est également pas toujours reproductible. 

Je me demande si l'utilisation de ulimit -n 1024 va affecter Apache, car de ce que j'ai lu, cela affecte le nombre de fichiers que Shell peut avoir ouverts.

Toute aide est appréciée.

MODIFIER:

  1. Redémarrer Apache aide un peu, jusqu'à ce que l'erreur se reproduise.
  2. Laisser le serveur Web inactif pendant un instant (sans intervalle défini) est également utile.
21
Code Poet

Je souffrais probablement d'une surcharge d'informations. Une explication possible est proposée ici que j'ai également mentionnée dans mon message original. J'imagine que j'ai raté le petit détail où OP indique qu'il travaille sur Mac OSX 10.8.x. Je suis sur 10.9 alors j'ai téléchargé le fichier zenddebugger.so de la page et tout va bien. N'a pas eu un seul too many open files toute la journée. 

Donc, peut-être que c'était un problème de ZendDebugger.

1
Code Poet

Volé sans vergogne à http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X

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 soft et hard.

Pour ajuster les limites maximales de fichiers ouverts dans OS X 10.7 (Lion) ou une version plus récente, éditez /etc/launchd.conf et augmentez les limites des deux valeurs selon vos besoins.

Par exemple, pour définir la limite logicielle sur 16384 fichiers et la limite stricte sur 32768, procédez comme suit:

Vérifier les limites actuelles:

$ launchctl limit

    cpu         unlimited      unlimited
    filesize    unlimited      unlimited
    data        unlimited      unlimited
    stack       8388608        67104768
    core        0              unlimited
    rss         unlimited      unlimited
    memlock     unlimited      unlimited
    maxproc     709            1064
    maxfiles    10240          10240

Editez (ou créez) /etc/launchd.conf et augmentez les limites. Ajoutez des lignes qui ressemblent à ce qui suit (en utilisant des valeurs appropriées à votre environnement):

limit maxfiles 16384 32768

Enregistrez le fichier et redémarrez le système pour que les nouvelles limites prennent effet. Après le redémarrage, vérifiez les nouvelles limites avec la commande launchctl limit:

$ launchctl limit

    cpu         unlimited      unlimited
    filesize    unlimited      unlimited
    data        unlimited      unlimited
    stack       8388608        67104768
    core        0              unlimited
    rss         unlimited      unlimited
    memlock     unlimited      unlimited
    maxproc     709            1064
    maxfiles    16384          32768
16
okket

Si vous rencontrez ce problème lors de l'exécution d'Apache, vous pouvez configurer Apache pour augmenter la limite:

$ Sudo vi /usr/sbin/apachectl

localisez: ULIMIT_MAX_FILES=""

et changez cette ligne en quelque chose comme:

ULIMIT_MAX_FILES="ulimit 4096"

Puis: Sudo apachectl restart

Cela ne fonctionnera pas pour les scripts CLI. Mais ajouter un ulimit directement à votre ~/.bash_profile (ou l’équivalent) devrait fonctionner à cette fin.

Cela présente l'avantage de définir des limites spécifiques pour Apache et votre terminal sans affecter les autres applications.

En outre, vous devriez pouvoir adapter cette méthode à d’autres systèmes d’exploitation en remplaçant ulimit par la commande applicable à cet environnement.

4
Henry

Je rencontrais le même problème sur El Capitain. J'ai trouvé un article ici Je dois tout crédit à la solution. Suivez les actions ci-dessous:

Réglage des limites de fichiers ouvertsPour ajuster les limites de fichiers ouverts sur l'ensemble du système sous Yosemite et au-dessus, vous devez créer deux fichiers de configuration. Le premier est un fichier de liste de propriétés (ou 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>

Cela définira la limite de fichiers ouverts sur 65536. Le deuxième fichier de configuration de 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 disposer des autorisations -rw-r – r–. Redémarrez le système.

Il est également recommandé de les configurer pour la session utilisateur dans .bashrc et d'ajouter:

ulimit -n 65536
ulimit -u 2048

J'espère que cela t'aides.

2
roborew

En ce qui concerne le correctif du débogueur, répondez ci-dessus. Malheureusement, la réponse fournie ci-dessus ne fonctionnera pas pour moi, car elle s'applique aux versions 5.4 de PHP et que je dois me limiter à 5.3.

Zend a publié la version 6.3 de son serveur, qui supporte php en 5.3. Cela fait un petit moment que je joue à l’installation (après avoir remis mon ulimit au réglage par défaut d’Apple) pour le tester et je n’éprouve aucun problème. Avant la mise à niveau, je ne pouvais pas faire de débogage php sans augmenter cette limite.

0
been_there_done_that

Per http://forums.zend.com/viewtopic.php?t=110823&start=10#p219438 Je pense que c'était vraiment juste un bug dans Zend Server qui a été corrigé dans la version 6.2. 

0
drewish

Vous rencontrez la même erreur en exécutant xDebug . Une mise à niveau a résolu le problème.

voir:

https://superuser.com/questions/787888/too-files-open-on-mac-osx-after-running-Apache-in-php-with-xdebug-for-som/829413#829413

0
Matthias Kleine