Ubuntu 14.04.3 LTS
Apache 2.4.7
PHP 5.5.9
約2週間前にmod_phpからPHP-FPMに切り替えました。ほとんどの場合、すべてがスムーズに実行されています。今は2回を除いて、Apache/phpが応答しなくなる状況がありました。再起動すると問題は解決しますが、なぜこれが発生するのか知りたいのですが。これがエラーログで、何百もの同様のタイプのエラーでいっぱいです。
# /var/log/Apache2/error.log
.
.
[Wed Dec 16 23:19:21.476641 2015] [fastcgi:error] [pid 32523] (104)Connection reset by peer: [client xx.xx.xx.xx:43676] FastCGI: comm with server "/usr/lib/cgi-bin/php5-fcgi" aborted: read failed
[Wed Dec 16 23:19:21.476866 2015] [fastcgi:error] [pid 32411] (2)No such file or directory: [client xx.xx.xx.xx:63082] FastCGI: failed to connect to server "/usr/lib/cgi-bin/php5-fcgi": connect() failed
[Wed Dec 16 23:19:21.477489 2015] [fastcgi:error] [pid 32527] (104)Connection reset by peer: [client xx.xx.xx.xx:49675] FastCGI: comm with server "/usr/lib/cgi-bin/php5-fcgi" aborted: read failed
[Wed Dec 16 23:19:21.478270 2015] [fastcgi:error] [pid 32548] (2)No such file or directory: [client xx.xx.xx.xx:59140] FastCGI: failed to connect to server "/usr/lib/cgi-bin/php5-fcgi": connect() failed
.
.
Apache設定
# /etc/Apache2/conf-available/php5-fpm.conf
<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
PHP5-FPM Config(私が役立つと思ったものが含まれています)
# /etc/php5/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock
.
.
user = www-data
group = www-data
.
.
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 1
pm.max_requests = 500
.
.
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
.
.
ソケットへの接続
# lsof -U | grep php
php5-fpm 14373 www-data 0u unix 0xffff8801ff42bb80 0t0 1721 /var/run/php5-fpm.sock
php5-fpm 17084 www-data 0u unix 0xffff8801ff42bb80 0t0 1721 /var/run/php5-fpm.sock
php5-fpm 18544 www-data 0u unix 0xffff8801ff42bb80 0t0 1721 /var/run/php5-fpm.sock
php5-fpm 18544 www-data 4u unix 0xffff8800da1e7700 0t0 701371 /var/run/php5-fpm.sock
php5-fpm 18649 www-data 0u unix 0xffff8801ff42bb80 0t0 1721 /var/run/php5-fpm.sock
php5-fpm 19672 www-data 0u unix 0xffff8801ff42bb80 0t0 1721 /var/run/php5-fpm.sock
これを理解するのに役立つ他の情報が必要な場合はお知らせください。私が述べたように、これは今二度だけ起こっています。ありがとう
この目的でソケットを使用しないでください。ブロックが多すぎて、大量のリクエストが届く中負荷のサイトでもサポートできません。代わりにTCPソケットを使用して、httpdをphp-fpmに接続してください。
手順については、これを参照してください: https://wiki.Apache.org/httpd/PHP-FPM (「TCPソケット(IPおよびポート)アプローチ」というタイトルのセクションをご覧ください).
また、あまり多くの労働者を設定していません。私は通常、利用可能なCPUコアごとに約2つをお勧めします(ほとんどのWebリクエストに500ミリ秒かかると想定しています)。平均応答時間に基づいて、独自の計算を行うことができます。負荷をサポートするためにより多くのワーカーが必要な場合は、より多くのサーバーを取得します。
接続エラーを解決することができました。 php-fpmに十分なリソースが割り当てられていませんでした。ワーカーの数を増やし(Joelに感謝)、タイムアウト制限を設定し(Froggizに感謝)、max_requests値を設定しました。次の投稿では、私が抱えていた問題について詳しく説明しています。
ありがとう!