webentwicklung-frage-antwort-db.com.de

Apache PHP/OSX Mavericks: - Stream konnte nicht geöffnet werden: Zu viele Dateien geöffnet

Ich habe kürzlich ein Upgrade auf OSX Mavericks durchgeführt, und seitdem habe ich den oben genannten Fehler auf meinem Entwicklungscomputer erhalten. Es gibt kein offensichtliches Problem im Code (es ist eine automatisch generierte Yii - Beispielanwendung). Beim Upgrade auf Mavericks ist Folgendes passiert:

  1. PHP wurde von 5.2.x, das mit OSX Lion gebündelt wurde, auf 5.4.x aktualisiert.
  2. Ich musste einen Zend Debugger für PHP 5.4 erhalten, indem ich Zend Server installierte, ZendDebugger.so aufnahm und den Zend Server deinstallierte Php 5.4.x).

Seitdem bekomme ich dieses Problem, nachdem ich die Website ein paar Mal geladen und neu geladen habe. Nachdem dieser Fehler aufgetreten ist, gibt mein Webserver denselben Fehler für jede andere auf localhost gehostete Anwendung zurück. Ich muss erwähnen, dass statische Webseiten in Ordnung sind.

Ich habe mehrere Threads zu diesem Thema gesehen. Die meisten weisen auf Probleme im Code hin, bei denen Datei-Handles nicht ordnungsgemäß geschlossen werden, wodurch der Schwellenwert für den Grenzwert für offene Dateien überschritten wird. Ich habe auch dieses thread gefunden, was darauf hindeutet, dass dies ein Problem mit dem Debugger zend ist. Es gibt auch einen Fehlerbericht für PHP 5.2.x. Nach dem Thread hier habe ich folgendes versucht:

$ ulimit -a

welche berichtet:

open files (-n) 256

Ebenfalls,

sysctl -a | grep files

kehrt zurück,

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

Ein weiterer interessanter Thread schlägt vor, dieses Limit (derzeit 256) mit Hilfe von zu erhöhen:

ulimit -n 1024

Ich habe alles versucht, aber nichts scheint zu funktionieren. Das Problem ist auch nicht durchgängig reproduzierbar. 

Ich frage mich, ob ulimit -n 1024 Apache beeinflussen wird, da es sich nach meiner Lektüre auf die Anzahl der Dateien auswirkt, die Shell geöffnet hat.

Jede Hilfe wird geschätzt.

EDIT:

  1. Der Neustart von Apache hilft ein wenig, bis der Fehler erneut auftritt.
  2. Wenn Sie den Webserver ein wenig im Leerlauf lassen (kein definiertes Intervall), ist dies ebenfalls hilfreich.
21
Code Poet

Ich litt wahrscheinlich an Informationsüberflutung. Eine mögliche Erklärung wird angeboten here , die ich auch in meinem ursprünglichen Beitrag erwähnt habe. Ich vermute, ich habe das kleine Detail vermisst, in dem das OP erwähnt, dass er an Mac OSX 10.8.x arbeitet. Ich bin am 10.9, also habe ich zenddebugger.so von der Seite heruntergeladen und die Dinge sehen gut aus. Ich habe nicht den ganzen Tag einen einzigen too many open files bekommen. 

Vielleicht war es ein ZendDebugger-Problem.

1
Code Poet

Schamlos aus http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X gestohlen

Um die aktuellen Grenzwerte in Ihrem Mac OS X-System zu prüfen, führen Sie Folgendes aus:

$ launchctl limit maxfiles

Die letzten beiden Spalten sind die weichen bzw. harten Grenzen.

Um die maximalen Grenzwerte für offene Dateien in OS X 10.7 (Lion) oder neuer anzupassen, bearbeiten Sie /etc/launchd.conf und erhöhen Sie die Grenzwerte für beide Werte entsprechend.

Um beispielsweise das Soft-Limit auf 16384-Dateien und das Hard-Limit auf 32768-Dateien festzulegen, führen Sie die folgenden Schritte aus:

Überprüfen Sie die aktuellen Grenzwerte:

$ 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

Bearbeiten (oder erstellen) /etc/launchd.conf und erhöhen Sie die Limits. Fügen Sie Zeilen hinzu, die wie folgt aussehen (unter Verwendung von für Ihre Umgebung geeigneten Werten):

limit maxfiles 16384 32768

Speichern Sie die Datei und starten Sie das System neu, damit die neuen Grenzwerte wirksam werden. Überprüfen Sie nach dem Neustart die neuen Grenzwerte mit dem Befehl 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

Wenn dieses Problem bei der Ausführung von Apache auftritt, können Sie Apache so konfigurieren, dass das Limit erhöht wird:

$ Sudo vi /usr/sbin/apachectl

lokalisieren: ULIMIT_MAX_FILES=""

und ändern Sie diese Zeile in etwas wie:

ULIMIT_MAX_FILES="ulimit 4096"

Dann: Sudo apachectl restart

Dies funktioniert nicht für CLI-Skripts. Das Hinzufügen eines ulimit direkt zu Ihrem ~/.bash_profile (oder einem gleichwertigen Element) sollte zu diesem Zweck funktionieren.

Dies hat den Vorteil, dass Sie spezifische Grenzwerte für Apache und Ihr Terminal festlegen, ohne dass dies Auswirkungen auf andere Apps hat.

Sie sollten diese Methode auch an andere Betriebssysteme anpassen können, indem Sie ulimit durch den für diese Umgebung gültigen Befehl ersetzen.

4
Henry

Ich habe auf El Capitain die gleiche Ausgabe gefunden. Fand einen Artikel hier Ich schulde der Lösung die gebührende Anerkennung. Folgen Sie den unten stehenden Aktionen:

Anpassen der Limits für offene Dateien Um die Limits für offene Dateien systemweit in Yosemite und höher anzupassen, müssen Sie zwei Konfigurationsdateien erstellen. Die erste ist eine Eigenschaftslistendatei (aka plist) in /Library/LaunchDaemons/limit.maxfiles.plist, die die folgende XML-Konfiguration enthält:

    <?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>

Dadurch wird das Limit für offene Dateien auf 65536 festgelegt. Die zweite Plist-Konfigurationsdatei sollte in /Library/LaunchDaemons/limit.maxproc.plist mit folgendem Inhalt gespeichert werden:

<?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>

Beide plist-Dateien müssen im Besitz von root: wheel sein und über die Berechtigungen -rw-r – r– verfügen. Starten Sie das System neu.

Es wird auch empfohlen, sie für die Benutzersitzung in .bashrc festzulegen und Folgendes hinzuzufügen:

ulimit -n 65536
ulimit -u 2048

Hoffe das hilft.

2
roborew

Zum Debugger-Patch siehe oben. Leider funktioniert die obige Antwort nicht für mich, da sie auf PHP-Versionen 5.4 zutrifft und ich mich auf PHP 5.3 beschränken muss.

Zend hat die Version 6.3 ihres Servers veröffentlicht, der PHP auf 5.3 unterstützt. Ich habe mit der Installation eine Weile gespielt (nachdem ich mein ulimit wieder auf Apple zurückgesetzt hatte), um es zu testen, und ich habe keine Probleme. Vor dem Upgrade konnte ich kein PHP-Debugging durchführen, ohne dieses Limit zu erhöhen.

Per http://forums.zend.com/viewtopic.php?t=110823&start=10#p219438 Ich denke, das war wirklich nur ein Fehler in Zend Server, der in 6.2 behoben wurde. 

0
drewish

Der gleiche Fehler beim Ausführen von xDebug ..__ wurde durch ein Upgrade behoben.

sehen:

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

0
Matthias Kleine