php.ini中memory_limit设低了会出错,修改了php.ini的memory_limit为64m,重启nginx,发现好了,原来是php的内存不足了。
如果这样修改了还解决不了问题,可以参考下面这些方案:
一、max-children和max-requests
一台服务器上运行着nginxphp(fpm)xcache,访问量日均300wpv左右。
最近经常会出现这样的情况:php页面打开很慢,cpu使用率突然降至很低,系统负载突然升至很高,查看网卡的流量,也会发现突然降到了很低。这种情况只持续数秒钟就恢复了。
检查php-fpm的日志文件发现了一些线索。
sep3008:32:23.289973[notice]fpm_unix_init_main(),line271:getrlimit(nofile):max:51200,cur:51200sep3008:32:23.290212[notice]fpm_sockets_init_main(),line371:usinginheritedsocketfd=10,“127.0.0.1:9000″sep3008:32:23.290342[notice]fpm_event_init_main(),line109:libevent:usingepollsep3008:32:23.296426[notice]fpm_init(),line47:fpmisrunning,pid30587
在这几句的前面,是1000多行的关闭children和开启children的日志。
原来,php-fpm有一个参数max_requests,该参数指明了,每个children最多处理多少个请求后便会被关闭,默认的设置是500。因为php是把请求轮询给每个children,在大流量下,每个childre到达max_requests所用的时间都差不多,这样就造成所有的children基本上在同一时间被关闭。
在这期间,nginx无法将php文件转交给php-fpm处理,所以cpu会降至很低(不用处理php,更不用执行sql),而负载会升至很高(关闭和开启children、nginx等待php-fpm),网卡流量也降至很低(nginx无法生成数据传输给客户端)
解决问题很简单,增加children的数量,并且将max_requests设置未0或者一个比较大的值:
打开/usr/local/php/etc/php-fpm.conf调大以下两个参数(根据服务器实际情况,过大也不行)
<valuename="max_children">5120</value><valuename="max_requests">600</value>
将nginx的errorlog打开,发现“pstreamsenttoobigheaderwhilereadingresponseheaderfromupstream”这样的错误提示。查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。参考老外写的修改办法增加了缓冲区容量大小设置,502问题彻底解决。后来系统管理员又对参数做了调整只保留了2个设置参数:clientheadbuffer,fastcgibuffersize。
三、request_terminate_timeout
如果主要是在一些post或者数据库操作的时候出现502这种情况,而不是在静态页面操作中常见,那么可以查看一下php-fpm.conf设置中的一项:
request_terminate_timeout
这个值是max_execution_time,就是fast-cgi的执行脚本时间。

php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。nginx502badgateway错误的解决办法2
今天,我的vps频繁提示nginx502badgateway错误了,重启了vps解决之后又出现,很烦。有点想不通,前两天网站达到了1290的访问量都没有出什么问题,怎么这次就出现了502badgateway?郁闷啊!!!在搜索了很久,终于找到了不少相关的答案,希望修改之后不会再出现这个错误了。唉,既然在网上找了那么久的答案,那当然得把有用的东西记录下,免得我下次再去谷歌~
由于我是采用了lnmp一键安装包,出了问题肯定要先到官方论坛去搜索下了,真好,官方有个这样的置顶帖,大家先瞧瞧。
第一种原因:目前lnmp一键安装包比较多的问题就是502badgateway,大部分情况下原因是在安装php前,脚本中某些lib包可能没有安装上,造成php没有编译安装成功。解决办法:可以尝试根据lnmp一键安装包中的脚本手动安装一下,看看是什么错误导致的。
在php.ini里,eaccelerator配置项一定要放在zendoptimizer配置之前,否则也可能引起502badgateway
在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf将其中的max_children值适当增加。
php执行超时,修改/usr/local/php/etc/php.ini将max_execution_time改为300
磁盘空间不足,如mysql日志占用大量空间
查看php-cgi进程是否在运行
也有网友给出了另外的解决办法:
nginx502badgateway的含义是请求的php-cgi已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致php-cgi进程终止,一般来说nginx502badgateway和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、查看phpfastcgi的进程数(max_children值)
代码:netstat-anpo|grep“php-cgi”|wc-l
代码:top观察fastcgi进程数,假如使用的进程数等于或高于5个,说明需要增加(根据你机器实际状况而定)
3、调整/usr/local/php/etc/php-fpm.conf的相关设置
<valuename=”max_children”>10</value><valuename=”request_terminate_timeout”>60s</value>max_children最多10个进程,按照每个进程20mb内存,最多200mb。request_terminate_timeout执行的时间为60秒,也就是1分钟。
以上就是nginx502BadGateway错误怎么解决的详细内容,更多请关注主机测评网其它相关文章!
本文来源:国外服务器--nginx502BadGateway错误怎么解决(nginx502报错是什么原因)
本文地址:https://www.idcbaba.com/guowai/4924.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



