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 Sie dieses Setup ausführen, funktioniert es recht gut. Nach einiger Zeit werde ich jedoch 403 Fehler für jede Anforderung ausführen. Ich habe das Apache-Fehlerprotokoll nachgeschlagen und 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
Mir scheint, dass die Datei nicht mehr gelesen werden kann und irgendwie die 403 zurückgibt. Ich habe bereits einige Beschränkungen herausgefunden, aber launchctl gibt eine unbegrenzte Beschränkung für geöffnete Dateien zurück:
~ $ 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 kehrt nach einiger Zeit immer noch zurück. Irgendeine Idee, was ich sonst noch überprüfen kann?
UPDATE : Wenn lsof -c httpd
ich den von Gordon Davisson vorgeschlagenen Befehl ausführe, sehe ich, dass es eine 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 ein Fallback verwendet, wenn Websockets nicht verfügbar sind oder das Gegenstück nicht auf dem Server ausgeführt wird. Was mich verwirrt ist das (CLOSED)
-teil, warum ist es noch gelistet?
UPDATE : Nach einiger Zeit habe ich den cslistener-Port nachgeschlagen, der eigentlich 9000 ist. Dies ist wiederum der Port, den xdebug auf das Remote-Debuggen wartet. Ich glaube, ich habe dort eine falsche Konfiguration oder es handelt sich um einen Fehler in xdebug (ich verwende XDebug 2.2.5, installiert von brew).
quelle
xdebug.remote_enable=0
inphp.ini
der xdebug Remote - Verbindungen zu drehen , wenn sie nicht verwendet wird . Apache Neustart erforderlich.Ich bin mir ziemlich sicher, dass in Apache etwas läuft (wahrscheinlich das PHP-Modul, aber es ist schwer sicher zu sein), das Dateideskriptoren verliert. Das heißt, es öffnet Dateien und lässt sie dann auf unbestimmte Zeit geöffnet. In diesem Fall dauert es nur länger, bis das Limit erreicht ist, wenn Sie das Limit für geöffnete Dateien erhöhen. Was Sie wirklich tun müssen, ist herauszufinden, was alle Dateien öffnet und sie offen lässt.
Sie können sich wahrscheinlich ein
lsof
Bild davon machen, was mit dem Befehl ("LiSt Open Files") los ist :Führe es aus, wenn Apache nicht lange gelaufen ist, um zu sehen, was normal ist, und wieder, wenn es das Limit erreicht. Suchen Sie in der zweiten Ausgabe nach vielen zusätzlichen Dateien, die nicht in der ersten Auflistung enthalten sind. Beachten Sie, dass dies dadurch etwas kompliziert wird, dass die von allen httpd-Prozessen geöffneten Dateien aufgelistet werden und (abhängig von Ihren Apache-Einstellungen und der Serverauslastung) möglicherweise eine große Anzahl von ihnen vorhanden ist. Das Wichtigste ist die Anzahl der Dateien, die von einem einzelnen Prozess geöffnet werden, nicht die Summe aller Serverprozesse. Sie können auch
sudo lsof -p someprocessID
nur einen einzelnen Serverprozess gleichzeitig auflisten.Wenn Sie sich die zusätzlichen geöffneten Dateien ansehen, erhalten Sie hoffentlich eine gute Vorstellung davon, was sie öffnen und was sie offen lassen.
quelle
Das Hinzufügen der folgenden Zeile zu xdebug.ini löste auch das Problem für mich
quelle
Ich bekomme das gleiche mit OSX 10.9.4 und sowohl Apache 2.2 als auch PHP 5.3 von Brew.
Obwohl dies das Problem nicht wirklich behebt, können Sie es eindämmen, indem Sie die Apache MaxRequestsPerChild-Einstellung auf 10 setzen - was für die Entwicklung in Ordnung sein sollte.
Das sollte Sie zumindest davor bewahren, Apache von Zeit zu Zeit neu starten zu müssen, um diese durchgesickerten Dateien loszuwerden
quelle