php-fpm支持的php-cgi
修改php-fpm 进程数在/usr/local/php/etc/php-fpm.conf 查找max_children 将后面的值修改成你要设置的值就可以
。
代码如下 | 复制代码 |
#vim /usr/local/php/etc/php-fpm.conf <value name="max_children">4</value> |
#max_children表示php-cgi的处理进程,设置max_children也需要根据服务器的性能进行设定,增大进程数,内存占用
也会相应增大,正常情况下每个php-cgi所耗费的内存在20M左右
代码如下 | 复制代码 |
<value name="request_terminate_timeout">44s</value> <value name="process_control_timeout">44s</value> <value name=”style”>apache-like </value> |
#因为php-fpm的默认静态处理方式会使得php-cgi的进程长期占用内存而无法释放,这也是导致nginx出错的原因之一
,因此可以将php-fpm的处理方式改成apache模式
Nginx 502 Bad Gateway错误触发条件
Nginx 502的触发条件
502错误最通常的出现情况就是后端主机当机。在upstream配置里有这么一项配置:proxy_next_upstream,这个配置
指定了 nginx在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况
拉,默认是error timeout。error就是当机、断线之类的,timeout就是读取堵塞超时,比较容易理解。我一般是全写
上的:
proxy_next_upstream error timeout invalid_header http_500 http_503;
不过现在可能我要去掉http_500这一项了,http_500指定后端返回500错误时会转一个主机,后端的jsp出错的话,本
来会打印一堆 stacktrace的错误信息,现在被502取代了。但公司的程序员可不这么认为,他们认定是nginx出现了错
误,我实在没空跟他们解释502的原理 了……
503错误就可以保留,因为后端通常是apache resin,如果apache死机就是error,但resin死机,仅仅是503,所以还
是有必要保留的。
解决办法
遇到502问题,可以优先考虑按照以下两个步骤去解决。
1、查看当前的PHP FastCGI进程数是否够用:
netstat -anpo | grep “php-cgi” | wc -l
如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大
。
2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例
如:
代码如下 | 复制代码 |
…… http { …… fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; …… } …… |
php.ini中memory_limit设低了会出错,修改了php.ini的memory_limit为64M,重启nginx,发现好了,原来是PHP的内
存不足了。
按照官方的答案,排查了相关的可能,并结合了网友的答案,得出了下面的解决办法。
1、查看php fastcgi的进程数(max_children值)
代码:netstat -anpo | grep “php-cgi” | wc -l
5(假如显示5)
2、查看当前进程
代码:top
观察fastcgi进程数,假如使用的进程数等于或高于5个,说明需要增加(根据你机器实际状况而定)
3、调整/usr/local/php/etc/php-fpm.conf 的相关设置
代码如下 | 复制代码 |
<value name=”max_children”>10</value> <value name=”request_terminate_timeout”>60s</value> |
max_children最多10个进程,按照每个进程20MB内存,最多200MB。
request_terminate_timeout执行的时间为60秒,也就是1分钟。