web-dev-qa-db-ja.com

PHP-FPMで時々「FastCGI:サーバーへの接続に失敗しました」エラー

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

これを理解するのに役立つ他の情報が必要な場合はお知らせください。私が述べたように、これは今二度だけ起こっています。ありがとう

2
Eko3alpha

この目的でソケットを使用しないでください。ブロックが多すぎて、大量のリクエストが届く中負荷のサイトでもサポートできません。代わりにTCPソケットを使用して、httpdをphp-fpmに接続してください。

手順については、これを参照してください: https://wiki.Apache.org/httpd/PHP-FPM (「TCPソケット(IPおよびポート)アプローチ」というタイトルのセクションをご覧ください).

また、あまり多くの労働者を設定していません。私は通常、利用可能なCPUコアごとに約2つをお勧めします(ほとんどのWebリクエストに500ミリ秒かかると想定しています)。平均応答時間に基づいて、独自の計算を行うことができます。負荷をサポートするためにより多くのワーカーが必要な場合は、より多くのサーバーを取得します。

2
Joel E Salas

接続エラーを解決することができました。 php-fpmに十分なリソースが割り当てられていませんでした。ワーカーの数を増やし(Joelに感謝)、タイムアウト制限を設定し(Froggizに感謝)、max_requests値を設定しました。次の投稿では、私が抱えていた問題について詳しく説明しています。

https://stackoverflow.com/questions/18009479/random-php-fastcgi-connection-reset-by-peer-incomplete-headers

ありがとう!

1
Eko3alpha