乐奇绿软 - 打造绿色软件分享,免费软件下载基地!
TAG标签| 网站地图| 设为首页| 加入收藏

Nginx 502 Bad Gateway错误的解决方案

相关游戏 相关文章 发表评论字体大小:【 | |

admin 2024-12-25 12:05 www.36001.cn
NginxV1.8.1 官方稳定版种类:服务器区大小:1.2M语言:英文 评分:.9标签:立即下载

max_children=40 , 每一个children平均占用20M-30M内存,children越多,可以同时同意的并发数目越多,一般children的值是网站最高并发数+浮动值,这值再×内存占用,就是你需要用到的内存。

max_requests = N 是指当每一个children同意了N次请求将来,就会把自己杀死,然后重新打造一个children。

PV / max_children = 每个children同意的request次数[ 默认预设浏览一个只调用一次PHP程序,可能异步调用呢?接口呢?]

譬如上面的值是1000,而你概念的是10240,那样fpm要超越10天才能杀死children并重建,如此假如存在内存泄露的话,就会致使进程占用过多的内存而没办法释放,从而使fpm的处置能力减少,还会产生一些莫名其妙的错误。

但假如你把这个值设置的过小,fpm频繁的杀死children并重建,也会致使额外的开销。

最好的优化当然是依据你网站的运行状况,去持续的调试,找到一个平衡点。

针对max_children还有一个偷懒的做法,假如你的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进程终止,

通常来讲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值)

代码: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分钟。

#################################################

网站运行环境是Nginx +php fastcgi模式的。这几天运行一直不稳定,一直出错,报502错误。

今天跟以前的同事请教了一下,他告诉我检查一下php-fpm的日志,那里记录了不少有用的信息。

于是我检查了一下,发现确实有不少显示错误信息:

Sep 30 08:32:23.289973 [NOTICE] fpm_unix_init_main, line 271: getrlimit: max:51200, cur:51200

假如和nginx.conf : worker_rlimit_nofile 65500; 不同需要检查,设置重启服务

Mar 01 14:39:15.881047 [NOTICE] fpm_children_make, line 352: child 12364 started

Mar 01 14:39:21.715825 [NOTICE] fpm_got_signal, line 48: received SIGCHLD

Mar 01 14:39:21.715899 [NOTICE] fpm_children_bury, line 215: child 11947 exited with code 0 after 175.443305 seconds from start

有些显示错误信息,就好说了,直接上网查信息。

经过搜索,最后总结出以下几条优化方案:

1、提高服务器的文件句柄打开打开

# vi /etc/security/limits.conf 加上

* soft nofile 65500

* hard nofile 65500

2、提高nginx的进程文件打开数

nginx.conf : worker_rlimit_nofile 65500;

3、修改php-fpm.conf文件,主要需要修改2处。

命令 ulimit -n 查询限制的打开文件数,php-fpm.conf 中的选项rlimit_files 确保和此数值一致。

value name=”max_requests”10240/value

value name=”rlimit_files”65500/value

4、

# vi /etc/sysctl.conf

底部添加

fs.file-max=65500

经过以上修改,重启PHP。/usr/local/webserver/php/sbin/php-fpm restart

在查询ulimit -n 是不是生效,不然重启服务器或者/etc/sysctl.conf、/etc/security/limits.conf的配置生效

到现在为止还没出现过以上的显示错误信息。所有运行正常。

TAG标签:Nginx(1)

转载请说明来源于乐奇绿软(https://www.hileqi.com)

本文地址:https://www.hileqi.com/news/6345.html

郑重声明:文章来源于网络作为参考,本站仅用于分享不存储任何下载资源,如果网站中图片和文字侵犯了您的版权,请联系我们处理!邮箱3450399331@qq.com

相关文章

游戏攻略