脚本宝典收集整理的这篇文章主要介绍了深入探讨:Nginx 502 Bad Gateway错误的解决方法,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
max_children=40,每个children平均占用20M-30M内存,children越多,可以同时接受的并发数量越多,一般children的值是网站最高并发数+浮动值,这值再×内存占用,就是你需要用到的内存。
max_requests = N 是指当每个children接受了N次请求以后,就会把自己杀死,然后重新建立一个children。
<FONT style="COLOR: #ff0000">pv / max_children = 每一个children接受的request次数[ 默认预设浏览一个只调用一次PHP程序,或许异步调用呢?接口呢?]
比如上面的值是1000,而你定义的是10240,那么
FPM要超过10天才能杀死children并重建,这样如果存在
内存泄露的话,就会导致进程占用过多的内存而无法释放,从而使fpm的处理能力降低,还会产生一些莫名其妙的
错误。
但是如果你把这个值设置的过小,fpm频繁的杀死children并重建,也会导致额外的开销。
最好的优化当然是根据你网站的运行情况,去
不断的调试,找到
一个平衡点。
针对max_children还有
一个偷懒的做法,
<FONT style="COLOR: #ff0000; FONT-Size: 10.5pt">如果你的PHP是5.3
,那么你可以把fpm的style设置为
apache-like,这个时候children的
数量就由fpm
自动控制。相应的配置参数是
start_servers:起始进程
数量min_spare_servers:最小进程
数量max_spare_servers:最大进程
数量当
服务器比较空闲的时候,fpm会主动杀死一些多余的children,用来节约资
源,当服务器繁忙的时候,服务器会
自动建立更多的children。
#########################
Nginx 502 Bad Gateway的含义是请求的
php-cgi已经执行,但是由于某种
原因(一般是读取资源的问题)没有执行完毕而导致
php-cgi进程终止,
<FONT style="COLOR: #ff0000; FONT-sIZE: 10.5pt">一般来说Nginx 502 Bad Gateway和PHP-fpm.conf的设置有关。
PHP-fpm.conf有两个至关
重要的参数,
一个是max_children,
另
一个是request_terminate_timeout,但是这个值不是通用的,而是需要自己计算的。
在安装好使用
过程中出现
502问题,一般是因为
默认
php-cgi进程是5个,可能因为
PHPcgi进程不够用而造成
502,需要
修改/usr/local/
PHP/etc/
PHP-fpm.conf 将其中的max_children值适当
增加。
计算的方式如下:如果你的服务器
性能足够好,且
宽带资源足够充足,
PHP脚本没有死循环或BUG的话你可以直接将 request_terminate_timeout设置成0s。0s的含义是让
php-cgi一直执行下去而没有时间限制。而如果你做不到这
一点,也就 是说你的
php-cgi可能出现某个BUG,
或者你的
宽带不够充足或者其他的原因导致你的
php-cgi假死那么就建议你给request_terminate_timeout赋
一个值,这个值可以根据服务器的
性能进行设定。一般来说
性能越好你可以设置越高,20分钟-30分 钟都可以。而max_children这个值又是怎么计算出来的呢?这个值原则上是越大越好,
php-cgi的进程多了就会处理的很快,排队的请求就会很少。 设置max_children也需要根据服务器的
性能进行设定,
一般来说一台服务器
正常情况下每
一个php-cgi所耗费的内存在20M左右。
按照
官方的答案,排查了相关的可能,并结合了
网友的答案,得出了下面的
解决办法。
1、查看PHP fastcgi的进程数(max_children值)
代码:net
stat -anpo | grep “
php-cgi” | wc -l
5(假如
显示5)
2、查看当前进程
代码:top
观察fastcgi进程数,假如使用的进程数等于或高于5个,说明需要
增加(根据你机器实际状况而定)
3、调整/usr/local/PHP/etc/PHP-fpm.conf 的相关设置
1060smax_children最多1
0个进程,按照每个进程20MB内存,最多200MB。
request_terminate_timeout执行的时间为60秒,也就是1分钟。
#################################################
网站运行环境是
Nginx +
PHP fastcgi模式的。这几天运行一直
不稳定,总是出错,报
502错误。
今天跟以前的同事请教了一下,他告诉我检查一下
PHP-fpm的日志,那里记录了很多有用的信息。
于是我检查了一下,发现确实有很多报错信息:
Sep 30 08:32:23.289973 [NOTICE] fpm_unix_in
IT_m
ain(),line 271: getrlimit(nofile): max:
51200,cur:51200
如果和
Nginx.conf : worker_rlimit_nofile 65500; 不一致必须检查,设置重启服务
Mar 01 14:39:15.881047 [NOTICE] fpm_children_make(),line 352: child 12364 (pool default) started
Mar 01 14:39:21.715825 [NOTICE] fpm_got_signal(),line 48: rec
eived SIGCHLD
Mar 01 14:39:21.715899 [NOTICE] fpm_children_bury(),line 215: child 11947 (pool default) exited with code 0 after 175.443305 seconds
From start
有的报错信息,就好说了,直接上网查信息。
经过
搜索,最后总结出以下几条
优化策略:
1、提升服务器的文件句柄打开打开
# vi /etc/s
ecurity/limits.conf
加上 soft nofile 65500
hard nofile 65500
Nginx.conf : worker_rlimit_nofile 65500;
3、修改PHP-fpm.conf文件,主要需要修改2处。
命令 ulimit -n 查看限制的打开
文件数,
PHP-fpm.conf 中的选项rlimit
files 确保和此数值一致。
@H301_75@10240
655004、
# vi /etc/
Sysctl.conf
底部添加fs.file-max=65500
经过以上
修改,重启
PHP。/usr/local/webserver/
PHP/sbin/
PHP-fpm restart
在查看ulimit -n
是否生效,否则重启服务器或者/etc/sysctl.conf、/etc/s
ecurity/limits.conf的配置生效
到目前为止还没有出现过以上的报错信息。一切运行正常。
脚本宝典总结
以上是脚本宝典为你收集整理的深入探讨:Nginx 502 Bad Gateway错误的解决方法全部内容,希望文章能够帮你解决深入探讨:Nginx 502 Bad Gateway错误的解决方法所遇到的问题。
如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。