在深入讨论:Nginx502错误网关错误解决方案

max_children = 40,平均每个孩子占20M-30M的记忆。越多的孩子,越多的并发数字可以同时接受。一般儿童的价值是网站的最高并发数+浮动值。此值大于RAM占用的内存,即您需要的内存。
max_requests = n指的是当每个孩子收到一个N的请求,它会杀了自己,然后重建一个孩子。
光伏/ max_children =每请求{默认默认PHP程序接受孩子的次数,或异步调用}
例如,上面的值是1000,和你的定义是10240,那么程序应该超过10天杀死孩子和重建,所以如果有内存泄漏,将造成进程占用太多的内存,无法释放,从而降低程序的处理能力,但也有一些莫名其妙的错误。
但如果你设置这个值太小,FPM经常杀死儿童和重建,这也会导致额外的开销。
当然,最好的优化是基于站点的运行,保持调试,并找到一个平衡点。
有max_children另一个偷懒的办法。如果你的PHP 5.3中,您可以设置FPM的风格Apache一样,和孩子的数量自动控制程序此时相应的配置参数。
start_servers:数起过程
min_spare_servers:最小的进程数
max_spare_servers:进程的最大数目
当服务器处于闲置状态,FPM将积极杀死一些多余的孩子节约资源。当服务器繁忙时,服务器将自动创建更多的孩子。
#########################
Nginx 502错误的网关是指要求php-cgi已经执行,但因为某些原因(通常读资源问题),php-cgi过程的终止而没有执行。
总的来说,nginx的502错误网关对php-fpm.conf制定相关。
php-fpm.conf有两个重要的参数,一个是max_children,
另一个是request_terminate_timeout,但价值不是万能的,但它需要在自己的计算。
在安装过程中,有502个问题,通常是因为默认的PHP的CGI程序是5,可能是因为phpcgi过程不够,导致502。有必要修改 / usr / / /等本地PHP / php-fpm.conf增加max_children值适当。
计算方法如下:

如果你的服务器性能足够好,和宽带资源是足够的,PHP脚本没有死循环或者bug,你可以直接设置request_terminate_timeout为0。0的意思是保持php-cgi运行没有时间限制。如果你不能做到这一点,也就是说你php-cgi可能是一个错误,或你的宽带不够或其他原因,你php-cgi死亡那么我建议你指定一个值,该值request_terminate_timeout,可以根据服务器的性能。在一般情况下,你就能更好的设置,你可以设置的更高,20分钟,30分钟。

又是怎样的max_children计算值原则上,越大越好越好,PHP的CGI程序将处理的很快,和排队的请求将很小。建立max_children也需要根据服务器的性能。
一般来说,每台PHP CGI服务器通常需要大约2000内存。
根据官方的答案,对相关的可能性进行了检查,并将答案与互联网用户结合起来,获得了以下解决方案。
1。看看PHP FastCGI进程数(max_children值)
代码:netstat -安保grep PHP的CGI WC L | |
5(如果显示5)
2。看看当前的过程
代码:顶
看着FastCGI进程数,如果进程使用的数量等于或大于5,有必要增加(取决于您的机器的实际情况)。
三.调整相关设置 / usr / / /等本地PHP / php-fpm.conf

60s
max_children最多10个进程,每个进程20mb根据记忆,起到200MB。
request_terminate_timeout的执行时间是60秒,即1分钟。
#################################################
网站运行环境是nginx+php FastCGI模式。这些天的运行一直不稳定,总是错的,502的错误。
今天,一个以前的同事,他告诉我检查php-fpm的日志,那里有很多有用的信息被记录下来。
所以我查了一下,发现有很多错误的信息:
9月30日08:32: 23.289973 {公告} fpm_unix_init_main(),271行:getrlimit(nofile):最大:51200、电流:51200
如果nginx.conf:worker_rlimit_nofile 65500;不一致,必须进行检查,设置重新启动服务
01 14:39:损坏15.881047 {通知} fpm_children_make(),352行:子12364(池违约)开始
01 14:39:损坏21.715825 {通知} fpm_got_signal(),48行:收到SIGCHLD
01 14:39:损坏21.715899 {通知} fpm_children_bury(),215行:子11947(池违约)退出代码0


有些错误的信息,很好地说,直接获取互联网信息。
在搜索之后,总结了以下优化策略。
1。升级服务器的文件句柄打开并打开。
#六加 / / / limits.conf安全等
*软nofile 65500
*硬nofile 65500
2。提高打开文件的Nginx的数量
Nginx.conf:worker_rlimit_nofile 65500;
3、修改php-fpm.conf文件,修改2的主要需求。
ulimit -n命令查看打开的文件数量有限,在php-fpm.conf选项rlimit_files确保数量与价值相一致。
一万零二百四十
六十五千五百
4,
#六 / / sysctl.conf等
底部添加
FS文件max = 65500
上述修改,重启后PHP。 / usr /本地/网络服务器 / / / sbin PHP php-fpm启动
看看ulimit -n是有效的,或重新启动服务器或 / / /等sysctl.conf等 /安全/ limits.conf配置生效
到目前为止,没有更多的虚假信息,一切正常。