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 值。以下帖子详细说明了我遇到的问题。
谢谢!