nigix504重启php,深入探讨:Nginx 502 Bad Gateway错误的解决方法

深入探讨:Nginx 502 Bad Gateway错误的解决方法

更新时间:2013年06月03日 15:57:34   作者:

本篇文章是对Nginx 502 Bad Gateway错误的解决方法进行了详细的分析介绍,需要的朋友参考下

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 的相关设置10

60s

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(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: received 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/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 确保和此数值一致。

10240

65500

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的配置生效

到目前为止还没有出现过以上的报错信息。一切运行正常。

相关文章

1a1b05c64693fbf380aa1344a7812747.png

这篇文章主要介绍了PHP网页游戏Xnova(ogame)源码解读的舰队相关函数部分,需要的朋友可以参考下2014-06-06

4f55910a645b073bc4fc65dc10dc14bd.png

给大家分析一段经典而且兼容各大浏览器的漂浮广告代码,希望对大家有所帮助2014-06-06

0ea3c7666119d5615e582f823fb3fad6.png

这篇文章主要介绍了ThinkPHP防止重复提交表单的方法,结合实例形式分析了thinkPHP防止重复提交表单的各种常见操作技巧与相关注意事项,需要的朋友可以参考下2018-05-05

4f96a78db829b1556ff16de21e013c7a.png

这篇文章主要介绍了Laravel5权限管理方法,结合实例形式分析了Laravel5权限管理的具体操作步骤与相关注意事项,需要的朋友可以参考下2016-07-07

8cc1031babc6aff2319f1c6af8544aa0.png

本文我们讲一下如何在PHP里设置、使用、删除Cookie,及Cookie的一些限制。PHP对Cookie支持是透明的,用起来非常方便2013-05-05

0c932a99bb7b6f23c937db507070cc7b.png

网络通信、文件存储中经常需要交换数据,为了减少网络通信流量、文件存储大小以及加密通信规则,本文介绍了PHP数据压缩、加解密,有兴趣的可以了解一下。2016-12-12

cca732bf65a93ed2ec0ac80c638460fe.png

本文是CI框架学习笔记的第一篇,主要介绍了CI框架的环境安装,基本术语以及框架流程,非常的详细,有需要的朋友可以参考下2014-10-10

2d9f31f2af7b675a3d153d2b7f1035a7.png

Drupal 7 提供的新功能其中一个就是可以使用 Query Builder and Query Objects 查询生成器来构造查询对象的能力,无需在代码中写原始的SQL语句,一是提高了代码可阅读性,二是兼容所有数据库2014-03-03

b452cee8ec5cd9e58ab98eba17281e59.png

这篇文章主要介绍了php计算两个日期时间差(返回年、月、日),实现了类似微博中的多少天、多少月、多少前前功能,需要的朋友可以参考下2014-06-06

f4838ec7e2d4da28e0b57d4e852dadd4.png

PHP加密扩展库有Mcrypt和Mhash,其中,Mcrypt扩展库可以实现加密解密功能,今天我我们讲的就是Mcrypt的功能和实例2013-11-11

最新评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值