Aktualisieren

Aktualisieren

Ich verwende Mac OS X 10.9.4, einschließlich des integrierten Apache2-Webservers mit PHP 5.5.14 von Brew (Pakete: php55, php55-intl, php55-pdo-pgsql, php55-xdebug).

Wenn ich dieses Setup ausführe, funktioniert es recht gut. Nach einiger Zeit erhalte ich jedoch bei jeder Anfrage 403-Fehler. Ich habe das Apache-Fehlerprotokoll durchgesehen und etwa Folgendes gefunden:

[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP Warning:  require_once(/Users/daniel/Development/massiveart/sulu-complete/app/bootstrap.php.cache): failed to open stream: Too many open files in /Users/daniel/Development/massiveart/sulu-complete/web/website.php on line 10, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP   1. {main}() /Users/daniel/Development/massiveart/sulu-complete/web/website.php:0, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP Fatal error:  require_once(): Failed opening required '/Users/daniel/Development/massiveart/sulu-complete/web/../app/bootstrap.php.cache' (include_path='.:/usr/local/Cellar/php55/5.5.14/lib/php') in /Users/daniel/Development/massiveart/sulu-complete/web/website.php on line 10, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP   1. {main}() /Users/daniel/Development/massiveart/sulu-complete/web/website.php:0, referer: http://sulu.lo/de
[Fri Jul 25 05:28:40 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:41 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:41 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:41 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:45 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:45 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de

Für mich sieht es so aus, als ob die Datei nicht mehr gelesen werden kann, und es wird irgendwie die 403 zurückgegeben. Ich habe bereits von bestimmten Beschränkungen erfahren, aber launchctl gibt zurück, dass ich eine unbegrenzte harte Beschränkung für geöffnete Dateien habe:

 ~ $ 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    256            unlimited

Ich habe auch schon versucht, die Maxfiles mit dem Befehl auf 4096 zu setzen launchctl limit maxfiles 4096 16384, aber das Problem tritt nach einiger Zeit immer noch auf. Irgendeine Idee, was ich sonst noch überprüfen kann?

AKTUALISIEREN: Wenn ich den Befehl wie von Gordon Davisson vorgeschlagen ausführe lsof -c httpd, sehe ich, dass es jede Menge Einträge wie die folgenden gibt:

httpd   1361 _www   15u    IPv4 0xb306b48659f63853       0t0     TCP localhost:50603->localhost:cslistener (CLOSED)

Ich kann sagen, dass die von mir verwendete Anwendung Websockets verwendet und auch einen Fallback verwendet, wenn Websockets nicht verfügbar sind oder das Gegenstück nicht auf dem Server ausgeführt wird. Was mich verwirrt, ist der (CLOSED)-Teil. Warum wird er immer noch aufgeführt?

AKTUALISIEREN: Nach einiger Zeit habe ich den cslistener-Port nachgeschlagen, der tatsächlich 9000 ist, was wiederum der Port ist, auf dem xdebug für Remote-Debugging lauscht. Ich vermute also, dass ich da eine falsche Konfiguration habe oder es sich um einen Fehler in xdebug handelt (ich verwende XDebug 2.2.5, installiert von brew).

Antwort1

Verwenden Sie PHPStorm mit XDEBUG auf dem Mac?

Ich habe das gleiche Problem. Ich habe hier einen offenen Fehler gefunden, der bei XDEBUG gemeldet wurde:

http://bugs.xdebug.org/view.php?id=1070

Aktualisieren

Dieser Fehler wurde jetzt behoben:

Ich habe gerade einen Patch von Sean Dubois integriert, der dieses Problem beheben sollte \o/! Der Patch wird in 2.3.4 und 2.4.0 enthalten sein.

Ich glaube, das ist das Commit:https://github.com/xdebug/xdebug/commit/6efc6588efc277d648a78b69c11c721992c996f9

Stellen Sie sicher, dass Siemit einer aktualisierten Versionmit diesem Patch.

Antwort2

Ich bin ziemlich sicher, dass Sie in Apache etwas laufen haben (wahrscheinlich das PHP-Modul, aber das ist schwer zu sagen), das Dateideskriptoren verliert. Das heißt, es öffnet Dateien und lässt sie dann einfach auf unbestimmte Zeit geöffnet. Wenn dies der Fall ist, dauert es durch Erhöhen des Limits für geöffnete Dateien nur länger, bis das Limit erreicht wird. Was Sie wirklich tun müssen, ist herauszufinden, was alle Dateien öffnet und offen lässt.

lsofSie können sich wahrscheinlich eine Vorstellung davon machen, was mit dem Befehl („LiSt Open Files“) passiert :

sudo lsof -c httpd

Führen Sie es aus, wenn Apache nicht lange läuft, um zu sehen, was normal ist, und dann noch einmal, wenn es das Limit erreicht. Suchen Sie in der zweiten Ausgabe nach vielen zusätzlichen Dateien, die in der ersten Auflistung nicht vorhanden sind. Beachten Sie, dass dies etwas dadurch kompliziert wird, dass die von geöffneten Dateien aufgelistet werdenallehttpd-Prozesse, und (je nach Apache-Einstellungen und Serverauslastung) kann es eine große Anzahl davon geben; wichtig ist die Anzahl der von einem einzelnen Prozess geöffneten Dateien, nicht die Gesamtzahl aller Serverprozesse. Sie können auch verwenden, sudo lsof -p someprocessIDum jeweils nur einen einzelnen Serverprozess aufzulisten.

Wenn Sie sehen, welche zusätzlichen geöffneten Dateien das sind, bekommen Sie hoffentlich eine gute Vorstellung davon, was die Dateien öffnet und was sie geöffnet lässt.

Antwort3

Das Hinzufügen der folgenden Zeile zu xdebug.ini hat das Problem für mich ebenfalls gelöst

xdebug.remote_autostart = 0

Antwort4

Ich bekomme dasselbe mit OSX 10.9.4 und sowohl Apache 2.2 als auch PHP 5.3 von Brew.

Dadurch wird das Problem zwar nicht behoben, Sie können es jedoch eindämmen, indem Sie die Apache-Einstellung „MaxRequestsPerChild“ auf einen Wert von etwa 10 setzen – für die Entwicklung sollte das kein Problem sein.

diff -r 2c0473b696fd -r acf809f04b17 apache2/2.2/httpd.conf
--- a/apache2/2.2/httpd.conf    Thu Aug 14 16:14:25 2014 -0500
+++ b/apache2/2.2/httpd.conf    Thu Aug 14 16:19:10 2014 -0500
@@ -437,7 +437,7 @@
 # necessary.

 # Server-pool management (MPM specific)
-#Include /usr/local/etc/apache2/2.2/extra/httpd-mpm.conf
+Include /usr/local/etc/apache2/2.2/extra/httpd-mpm.conf

 # Multi-language error messages
 #Include /usr/local/etc/apache2/2.2/extra/httpd-multilang-errordoc.conf
diff -r 2c0473b696fd -r acf809f04b17 apache2/2.2/extra/httpd-mpm.conf
--- a/apache2/2.2/extra/httpd-mpm.conf  Thu Aug 14 16:14:25 2014 -0500
+++ b/apache2/2.2/extra/httpd-mpm.conf  Thu Aug 14 16:19:10 2014 -0500
@@ -38,7 +38,7 @@
     MinSpareServers       5
     MaxSpareServers      10
     MaxClients          150
-    MaxRequestsPerChild   0
+    MaxRequestsPerChild  10
 </IfModule>

 # worker MPM

Das sollte Ihnen zumindest ersparen, Apache immer wieder neu starten zu müssen, um die durchgesickerten Dateien loszuwerden

verwandte Informationen