PHP-FPM 偶尔会出现“FastCGI:无法连接到服务器”错误

PHP-FPM 偶尔会出现“FastCGI:无法连接到服务器”错误
Ubuntu 14.04.3 LTS
Apache 2.4.7
PHP 5.5.9

大约两周前,我从 mod_php 切换到 PHP-FPM。大部分情况下,一切都运行顺利。除了两次我遇到 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 配置(包括我认为可能有用的内容)

# /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

如果还有其他信息需要帮助解决此问题,请告诉我。正如我所说,这种情况现在只发生过两次。谢谢

答案1

不要为此目的使用套接字。它们会阻塞太多,甚至无法支持有大量请求进入的中等负载站点。请改用 TCP 套接字将 httpd 连接到 php-fpm。

请参阅此说明:https://wiki.apache.org/httpd/PHP-FPM(查看题为“TCP 套接字(IP 和端口)方法”的部分)。

您也没有设置太多工作器。我通常建议每个可用 CPU 核心设置大约两个工作器(假设大多数 Web 请求需要 500 毫秒)。您可以根据平均响应时间自行计算。如果您需要更多工作器来支持负载,请获取更多服务器。

答案2

我已经能够解决连接错误。我没有为 php-fpm 分配足够的资源。我增加了工作线程数量(感谢 Joel),设置了超时限制(感谢 Froggiz)并设置了 max_requests 值。以下帖子详细说明了我遇到的问题。

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

谢谢!

相关内容