502高负载下带PHP-FPM的坏网关nginx
我们目前正在AmazonEC2上运行nginx背后的PHP-FPM。站点将停止响应,并在每次高负载时向客户端输出502坏网关 这是来自php fpm error.log的日志502高负载下带PHP-FPM的坏网关nginx,php,linux,amazon-web-services,nginx,amazon-ec2,Php,Linux,Amazon Web Services,Nginx,Amazon Ec2,我们目前正在AmazonEC2上运行nginx背后的PHP-FPM。站点将停止响应,并在每次高负载时向客户端输出502坏网关 这是来自php fpm error.log的日志 [25-FEB-2014:10:29∶50]警告:[池WWW ]服务器达到PM.Max儿童设置(14),考虑提高它 [25-Feb-2014 12:23:11]警告:[池www]child 2029在启动8736.088351秒后以代码3退出 [25-Feb-2014 12:23:11]通知:[泳池www]child 4
[25-FEB-2014:10:29∶50]警告:[池WWW ]服务器达到PM.Max儿童设置(14),考虑提高它
[25-Feb-2014 12:23:11]警告:[池www]child 2029在启动8736.088351秒后以代码3退出 [25-Feb-2014 12:23:11]通知:[泳池www]child 4142已启动 这是nginx error.log中的日志 2014/02/25 14:14:30[错误]2013#0:*51168 recv()在从上游读取响应头时失败(104:由对等方重置连接),客户端:192.168.160.215,服务器: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,服务器: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,服务器:domain.com,请求:“GET/HTTP/1.1”,上游:fastcgi://127.0.0.1:9000,主机:“www.domain.com” 我们已经基于此交换实现了TCP/IP配置。 并将此修复程序也实现到我们的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
使用PHP FPM,需要PHP进程的请求从nginx传递到PHP FPM进程,并返回结果 如果您一次有太多的请求(如果您的任何请求花费的时间太长,或者您的资源与负载不匹配,就会发生这种情况),您将开始接收超时或被php fpm拒绝的请求。这就是您看到的502错误
<代码> [25-FEB-2014:10:29∶50]警告:[池WWW ]服务器达到PM.Max儿童设置(14),考虑提高它
您可以增加这个,但这本身可能不是一个解决方案。达到max children的原因很可能是由于在实例上处理单个请求所需的时间。如果发生这种情况时,您的CPU已达到最大值,那么这可能不会有帮助您可能想考虑将实例大小增加为短期解决方案。或者进行代码更改以更好地利用缓存。
关于“我们应该在最大子代上设置什么数字的任何特定理论”,请参见此处 顺便说一句,我认为你的价值观 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
尝试增加pm.max_children=14(即64),和减少超时。@ziollek是否有任何具体的理论,我们应该在最大子项上设置什么数字?当我们的服务器开始响应CPU没有达到最大值,并且内存中仍有大量的主机空间时,此链接可能对您调整配置非常有用。@user3351805然后尝试增加最大子项设置并查看是否有帮助。如果您的php请求正在等待外部服务,您可能需要并行处理更多的请求。是否有任何具体的理论,我们应该在max children上设置什么数字?@user3351805实际上没有。测试什么最适合你的情况。最终,你的硬件会有太多的开放线程,你无论如何都需要升级。