【发布时间】:2014-03-27 22:57:58
【问题描述】:
我们目前在 Amazon EC2 上的 nginx 后面运行 PHP-FPM。每次高负载时,站点都会停止响应并向客户端输出 502 bad gateway。
这是来自 php-fpm error.log 的日志
[25-Feb-2014 10:29:50] 警告:[pool www] 服务器达到 pm.max_children 设置 (14),考虑提高它
[25-Feb-2014 12:23:11] 警告:[pool www] child 2029 在 8736.088351 秒后以代码 3 退出
[25-Feb-2014 12:23:11] 通知:[pool www] child 4142 开始
这是来自 nginx error.log 的日志
2014/02/25 14:14:30 [错误] 2013#0: *51168 recv() 在从上游读取响应标头时失败(104:对等方重置连接),客户端:192.168.160.215,服务器:域.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,服务器:域.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,服务器:域.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
【问题讨论】:
-
尝试增加 pm.max_children = 14(即 64),并减少超时。
-
@ziollek 有没有什么具体的理论可以说明我们应该为我们的最大孩子设置什么数字?
-
此链接可能对您调整配置有用if-not-true-then-false.com/2011/…
标签: php linux amazon-web-services nginx amazon-ec2