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.
lsof
Sie 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 someprocessID
um 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