BrewからのPHP 5.5.14の組み込みApache2Webサーバーを含むMacOS X 10.9.4を実行しています(パッケージ:php55、php55-intl、php55-pdo-pgsql、php55-xdebug) 。
このセットアップを実行すると、非常にうまく機能します。ただし、しばらくすると、リクエストごとに403エラーが発生します。 Apacheエラーログを調べたところ、次のようなものが見つかりました。
[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
ファイルを読み取ることができなくなったように見え、どういうわけか403を返します。特定の制限についてはすでに知っていますが、launchctlは開いているファイルに無制限のハード制限があると返します。
~ $ 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
また、コマンドlaunchctl limit maxfiles 4096 16384
を使用してmaxfilesを4096に設定しようとしましたが、しばらくしても問題は解決しません。他に何を確認できるか考えていますか?
[〜#〜] update [〜#〜]:Gordon Davissonの提案に従ってlsof -c httpd
コマンドを実行すると、次のようなエントリが大量にあることがわかります。
httpd 1361 _www 15u IPv4 0xb306b48659f63853 0t0 TCP localhost:50603->localhost:cslistener (CLOSED)
私が使用しているアプリケーションはWebSocketを使用しており、WebSocketが使用できない場合、または対応するものがサーバー上で実行されていない場合にもフォールバックを使用していると言えます。私を混乱させるのは(CLOSED)
-partですが、なぜまだリストされているのですか?
[〜#〜] update [〜#〜]:しばらくして、cslistenerポート(実際には9000)を調べました。これも、xdebugがリモートデバッグをリッスンしているポートです。だから私はそこにいくつかの間違った設定があるか、それはxdebugのバグです(私はbrewによってインストールされたXDebug 2.2.5を使用しています)
MacのXDEBUGでPHPStormを使用していますか?
私も同じ問題を抱えてる。 XDEBUGに提出された未解決のバグをここで見つけました:
http://bugs.xdebug.org/view.php?id=107
このバグは修正されました:
Sean Duboisによるパッチをマージしました。これにより、この\ o /が修正されるはずです!パッチは2.3.4と2.4.0にあります。
これはコミットだと思います: https://github.com/xdebug/xdebug/commit/6efc6588efc277d648a78b69c11c721992c996f9
このパッチで更新されたバージョンを使用であることを確認してください。
Apacheで何かが実行されていると確信しています(おそらくPHPモジュールですが、確認するのは難しいです)。ファイル記述子がリークしています。つまり、ファイルを開いてから、開いたままにしておきます。この場合、開いているファイルの制限を増やすと、制限に達するまでの時間が長くなるだけです。本当に必要なのは、すべてのファイルを開いて開いたままにしているものを追跡することです。
lsof
( "LiSt Open Files")コマンドで何が起こっているのか、おそらくいくつかのアイデアを得ることができます:
Sudo lsof -c httpd
Apacheが長時間実行されていないときに実行して、正常な状態を確認し、制限に達したときに再度実行します。 2番目の出力で、最初のリストにない追加のファイルがたくさんないか調べます。これは、all httpdプロセスによって開かれたファイルを一覧表示するため、多少複雑になることに注意してください。また、(Apacheの設定とサーバーの負荷によっては)多数のファイルが存在する場合があります。重要なのは、すべてのサーバープロセスの合計ではなく、単一のプロセスによって開かれたファイルの数です。 Sudo lsof -p someprocessID
を使用して、一度に1つのサーバープロセスのみを一覧表示することもできます。
うまくいけば、余分に開いているファイルが何であるかを確認することで、何がそれらを開いて開いたままにしているのかがわかります。
Xdebug.iniに次の行を追加すると、問題も解決しました
xdebug.remote_autostart = 0
私はOSX10.9.4とApache2.2とPHP 5.3 fromBrewの両方で同じことをしています。
これで実際に問題が解決するわけではありませんが、Apache MaxRequestsPerChild設定を10などに設定することで、問題を回避できます。これは、開発には問題ないはずです。
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
これにより、少なくともこれらのリークされたファイルを取り除くためにApacheを頻繁に再起動する必要がなくなります。