正如我今天负载testing我的网站(使用blitz.io ); 尽pipe有大量的RAM(超过50%)和CPU能力(超过70%)可用,但结果表明,我的网站以每秒一定数量的并发用户开始超时。
我的网站(/var/log/nginx/example.com.error.log)的Nginx错误日志显示如下:
2013/02/12 19:03:57 [error] 13749#0:* 3175连接()到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”
谷歌search的错误导致我这个答案 ,使用TCP \ IP连接,而不是unix套接字作为问题的解决scheme; 因为unix socket的“高负载情况下的问题是众所周知的” 。
所以,正如答案所build议的那样:
我用/etc/php5/fpm/pool.d/www.conf中的listen 127.0.0.1:9000replace了listen = /var/run/php5-fpm.sock
由于我的分配(Debian Wheezy)上没有/etc/nginx/php_location ,所以我什么也没做。
由于我使用fastcgi_pass unix:/var/run/php5-fpm.sock; 在我的网站的Nginxconfiguration文件中,即/etc/nginx/sites-available/example.com,我用fastcgi_pass 127.0.0.1:9000;取代了它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,它应该没有select地使用/var/run/php5-fpm.sock ?
我使用$ sudo php5-fpm -t命令来testingPHP-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
该错误说,/ /etc/php5/fpm/pool.d/www.conf中第33行有错误,恰好是这样的: listen 127.0.0.1:9000 (这不是巧合,是吗?) 。
看完之后,我马上把它和其他的几行比较,然后打了我一个= (等号)失踪!
所以,这是它应该是: listen = 127.0.0.1:9000并修复了一切!
听起来像(基于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'设置。 这是错误日志的path。 如果这被注释掉了,取消注释,重新启动php-fpm服务并检查日志文件的内容。
您可以在您的select上使用IP /端口或Unix套接字。
这取决于你的php-fpmconfiguration文件是www.conf ,在我的系统(Ubuntu 16.04)中,这个文件位于/etc/php/7.0/fpm/pool.d 。
在这个文件中,你可以find一个名为listen指令,例如,如果你把这个指令设置为/run/php/php7.0-fpm.sock ,那么在你的nginx站点中configurationfastcgi_pass应该是unix:/run/php/php7.0-fpm.sock ;
但是如果你设置听127.0.0.1:9000 ,那么fastcfg_pass应该是127.0.0.1:9000 。
[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
它不会加载www.conf因为它在第33行有错误,所以可能会回落到使用套接字的默认值。