当我今天对我的网站进行负载测试时(使用blitz.io);尽管有大量的 RAM(超过 50%)和 CPU 能力(超过 70%)可用,结果显示我的网站在每秒并发用户数达到一定数量时就开始超时。
我的网站的 Nginx 错误日志(/var/log/nginx/example.com.error.log)显示如下内容:
2013/02/12 19:03:57 [错误] 13749#0: *3175 connect() to unix:/var/run/php5-fpm.sock 失败(11:资源暂时不可用)连接到上游时,客户端:54.123.456.46,服务器:example.com,请求:“GET / HTTP/1.1”,上游:“fastcgi://unix:/var/run/php5-fpm.sock:”,主机:“example.com”
通过谷歌搜索错误,我发现这个答案其中指出使用 TCP\IP 连接而不是 unix 套接字作为问题的解决方案;因为 unix 套接字的“高负荷情况下的问题是众所周知的”。
因此,正如答案所建议的那样:
我在 /etc/php5/fpm/pool.d/www.conf 中替换
listen = /var/run/php5-fpm.sock
为listen 127.0.0.1:9000
由于我的发行版(Debian Wheezy)上没有这个
/etc/nginx/php_location
,所以我没有采取任何措施。由于我
fastcgi_pass unix:/var/run/php5-fpm.sock;
在我的站点的 Nginx 配置文件中使用了 /etc/nginx/sites-available/example.com,因此我将其替换为fastcgi_pass 127.0.0.1:9000;
现在的问题是,502 Bad Gateway
我访问我的网站时出现错误。是的,我使用了reload
Nginx 和 PHP-FPM。我做错了什么?(我完全是新手,正在尽我所能边做边学。)
如果这是相关的,当我这样做时sudo service php5-fpm restart
,我会收到此错误:
[FAIL] Restarting PHP5 FastCGI Process Manager: php5-fpm failed!
自从我做了上述更改后,这种情况才发生。我该如何解决这个问题?
如果我需要更多信息,请告诉我。
更新
该文件/etc/nginx/sites-available/default
内容如下:
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
那么,这是否意味着,如果我的服务器运行的是 PHP-FPM,应该,别无选择,使用/var/run/php5-fpm.sock
?
答案1
我使用$ sudo php5-fpm -t
命令来测试 PHP-FPM 的设置是否正确(如果不正确,它会显示一些错误/信息)。
输出结果如下:
[13-Feb-2013 18:35:00] ERROR: [/etc/php5/fpm/pool.d/www.conf:33] value is NULL for a ZEND_INI_PARSER_ENTRY
[13-Feb-2013 18:35:00] ERROR: Unable to include /etc/php5/fpm/pool.d/www.conf from /etc/php5/fpm/php-fpm.conf at line 33
[13-Feb-2013 18:35:00] ERROR: failed to load configuration file '/etc/php5/fpm/php-fpm.conf'
[13-Feb-2013 18:35:00] ERROR: FPM initialization failed
错误表明,的第 33 行出现了问题/etc/php5/fpm/pool.d/www.conf
,碰巧的是:(这listen 127.0.0.1:9000
并不是巧合,是吗?)。
看到之后,我立即将其与其他行进行了比较,然后我突然意识到,=
少了一个(等号)!
所以,这就是它应该有的样子:listen = 127.0.0.1:9000
并且一切都解决了!
答案2
听起来(基于 502 和错误消息)php-fpm 服务无法启动。
是否有其他东西在使用端口 9000?要检查,请运行:
sudo lsof -P | grep TCP | grep LISTEN
并查找类似 的内容TCP localhost:9000 (LISTEN)
。如果有,您可以使用其他端口,例如 9001。
php-fpm 错误日志是检查的好地方。默认情况下,它可能未启用。如果您查看 php-fpm conf 文件(我的系统上为 /etc/php5/fpm/php-fpm.conf),您将找到“error_log”设置。这是错误日志的路径。如果注释掉了,请取消注释,重新启动 php-fpm 服务并检查日志文件的内容。
答案3
您可以根据自己的选择使用 IP/端口或 Unix 套接字。
这取决于您的 php-fpm 配置,该文件是www.conf
,在我的系统(Ubuntu 16.04)中,该文件位于/etc/php/7.0/fpm/pool.d
。
在此文件中,您可以找到一个名为的指令listen
,例如,如果您将此指令设置为/run/php/php7.0-fpm.sock
,那么您的 nginx 站点配置fastcgi_pass
应该是unix:/run/php/php7.0-fpm.sock
;
但如果你设定听的话127.0.0.1:9000
应该fastcfg_pass
是127.0.0.1:9000
。
答案4
我遇到了同样的问题,将 IP 从 127.0.0.1 更改为 0.0.0.0 后问题就解决了!结果应该如下所示:
监听 = 0.0.0.0:9000