欢迎来到云服务器

服务器租用

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 的相关配置
<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(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

腾讯云代理

Copyright © 2003-2021 MFISP.COM. 国外vps服务器租用 梦飞云服务器租用 版权所有 粤ICP备11019662号