首页 文章

502在高负载下使用PHP-FPM的错误网关nginx

提问于
浏览
2

我们目前在Amazon EC2上运行nginx后面的PHP-FPM . 每次高负载时,站点都将停止响应并向客户端输出502坏网关 .

这是来自php-fpm error.log的日志

[2014年2月25日10:29:50]警告:[池www]服务器达到pm.max_children设置(14),考虑提高它[25-Feb-2014 12:23:11]警告:[pool www]孩子2029从开始8736.088351秒后退出代码3 [25-Feb-2014 12:23:11]注意:[pool www] child 4142 start

这是来自nginx error.log的日志

2014/02/25 14:14:30 [错误] 2013#0:* 51168 recv()失败(104:通过对等方重置连接)从上游读取响应头,客户端:192.168.160.215,server:domain.com ,请求:“GET / HTTP / 1.1”,上游:“fastcgi://127.0.0.1:9000”,主持人:“www.domain.com”2014/02/25 14:24:15 [错误] 2013#0 :* 51310 recv()失败(104:通过对等方重置连接)从上游读取响应头,客户端:192.168.160.215,server:domain.com,请求:“GET / HTTP / 1.1”,上游:“fastcgi:/ /127.0.0.1:9000“,主持人:”www.domain.com“2014/02/25 14:40:21 [错误] 2013#0:* 51312 recv()失败(104:通过对等方重置连接)来自上游的响应头,客户端:192.168.160.215,server:domain.com,请求:“GET / HTTP / 1.1”,上游:“fastcgi://127.0.0.1:9000”,主持人:“www.domain.com”

我们已经基于此交换实现了TCP / IP配置 . Error 502 in nginx + php5-fpm

并将此修复程序实现到我们的php-fpm配置以及502 Gateway Errors under High Load (nginx/php-fpm)

这是我们在php-fpm.d / www.conf中使用的配置

listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 14
pm.start_servers = 7
pm.min_spare_servers = 7
pm.max_spare_servers = 14

并且nginx / conf.d / www.conf上的配置如下所示

fastcgi_buffers 256 16k
fastcgi_buffer_size 32k
fastcgi_connect_timeout 300
fastcgi_send_timeout 300
fastcgi_read_timeout 300

2 回答

  • 0

    使用PHP FPM,需要php进程的请求从nginx传递到php-fpm进程并返回结果 .

    如果您一次有太多请求(如果您的任何请求花费的时间过长,或者您的资源与您的负载不匹配,则会发生这种情况),您将开始收到超时或被php-fpm拒绝的请求 . 您看到的502错误是哪个 .

    [25-Feb-2014 10:29:50] WARNING: [pool www] server reached pm.max_children setting (14), consider raising it

    你可以增加这个,但这本身可能不是解决方案 . 您达到最大子项的原因可能是由于在您的实例上处理单个请求所花费的时间 . 如果你的CPU在发生这种情况时最大化,它可能无济于事 .

    您可能需要考虑将实例大小增加为短期解决方案 . 或者进行代码更改以更好地利用缓存 .

  • 1

    关于"any specific theory that what numbers we should set on our max children"见这里https://serverfault.com/questions/295766/what-is-wrong-in-my-php-fpm-configuration

    顺便说一句,我认为你的 Value 观

    pm.start_servers = 7
        pm.min_spare_servers = 7
        pm.max_spare_servers = 14
    

    很大的尝试这些

    pm.start_servers = 3
        pm.min_spare_servers = 2
        pm.max_spare_servers = 5
    

相关问题