记录生活 学习SEO优化 | 他日若遂凌云志 敢笑黄巢不丈夫
>>Home > 学习笔记 > vps记录 > lnmp出现502 Bad Gateway报错

lnmp出现502 Bad Gateway报错

Tags: | | 作者:海天无影

之前海天使用dnspod检测服务器的运行情况,今天突然碰到了短暂的502 Bad Gateway报错,虽然时间不长,但感觉还是不爽啊。于是上网找了,原来是php执行过程造成的问题,主要和进程数以及进程执行时间有关。按照网上说的改了下,运行一段时间看看效果。顺便把相关的内容备份下来。


一般出现502 Bad Gateway报错,首先查看当前的PHP FastCGI进程数是否够用:

netstat -anpo | grep "php-cgi" | wc -l

如果还不行就要修改timeout的时间了,两个参数的修改都在php-fpm.conf文件里,文件目录为:/usr/local/php/etc/php-fpm.conf。其中一个是”max_children”,另一个是”request_terminate_timeout”

max_children就是进程数了,计算的方式如下:

max_children这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。但是设置max_children也需要根据服务器的性能进行设定,一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右,因此我的max_children我设置成40个,20M*40=800M也就是说在峰值的时候所有PHP-CGI所耗内存在800M以内,低于我的有效内存1Gb。而如果lnmp默认的的max_children设置的较小,只有5个,那么php-cgi就会“很累”,处理速度也很慢,等待的时间也较长。如果长时间没有得到处理的请求就会出现504 Gateway Time-out这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现502 Bad gateway这个错误。

如果你的服务器性能足够好,且宽带资源足够充足,PHP脚本没有系循环或BUG的话你可以直接将”request_terminate_timeout”设置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。而如果你做不到这一点,也就是说你的PHP-CGI可能出现某个BUG,或者你的宽带不够充足或者其他的原因导致你的PHP-CGI能够假死那么就建议你给”request_terminate_timeout”赋一个值,这个值可以根据你服务器的性能进行设定。一般来说性能越好你可以设置越高,20分钟-30分钟都可以。由于我的服务器PHP脚本需要长时间运行,有的可能会超过10分钟因此我设置了900秒,这样不会导致PHP-CGI死掉而出现502 Bad gateway这个错误。

max_requests即是说每个进程若超过这个数目(跟php进程有一点点关系,关系不大),就自动杀死。

日志信息 »

该日志于2013-02-18 18:01由 海天无影 发表在vps记录分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下转载到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

2条评论▼点击进行评论

  1. 博主你好,我在博客里加了一个“独立博客大全”的版块,有时间过来看看,如果没有添加你的,通知我一声,无条件收录!

  2. 上次好像遇到过。。

icon_wink.gif icon_neutral.gif icon_mad.gif icon_twisted.gif icon_smile.gif icon_eek.gif icon_sad.gif icon_rolleyes.gif icon_razz.gif icon_redface.gif icon_surprised.gif icon_mrgreen.gif icon_lol.gif icon_idea.gif icon_biggrin.gif icon_evil.gif icon_cry.gif icon_cool.gif icon_arrow.gif icon_confused.gif icon_question.gif icon_exclaim.gif 

« 出来混,迟早是要还的 生活终需回归它的本质,慢下来,会很快~ »