在过去的一个月里,我被迫学习了很多关于服务器配置、集成、AWS等方面的知识。
我为我的应用程序做好了一切准备和运行(主要感谢http://github.com/wr0ngway/rubber gem和#Rubberec2IRC频道的帮助)。然而,我遇到了一个神秘的问题。
我在HAProxy后面运行Nginx +乘客。到目前为止,只有一个Nginx +乘客主机被使用,所以HAProxy并没有做太多的事情,但是我们将来会增加更多的应用服务器。
我偶尔会遇到503个错误,这些错误会在一天中的某些时候变得烦人(在较高的负载期间?)。这些错误既发生在静态资产上,也发生在路由urls上。我已经确定抛出它们的是HAProxy,因为页面及其标题与/etc/ have /errors/503.http中的内容相同。
我认为nginx并不关心它收到了多少请求,它可以处理所有的请求,因为它有自己的排队,并且乘客正确地分配东西。那么,为什么HAProxy声称没有可用的服务器来处理某些请求呢?
global
log 127.0.0.1 local0 warning
maxconn 1024
defaults
log global
mode http
retries 3
balance roundrobin
option abortonclose
option redispatch
option httplog
contimeout 4000
clitimeout 150000
srvtimeout 30000
listen passenger_proxy x.x.x.x:x
option forwardfor
server web01 web01:xxxx maxconn 20 check注意: IPs和端口被替换为xes。
我不擅长这些东西,一边学一边学。
我使用siege对服务器进行基准测试,发现当运行大约58个并发会话时,我可以复制503。在这种情况下,成功率只有54%。
我发现每次得到503时,nginx访问日志都会输出"-" 400 0 "-" "-" "-"。
每个人都说,当cookie太大时,nginx会产生"400坏请求“错误。然而,设置large_client_header_buffers指令并没有为我修复它。
我在服务器上运行了siege,目标是nginx监听端口上的nginx,现在nginx开始返回499个错误,其模式与它以前返回503的模式相同。围城不断地告诉我,当这种情况发生的时候,连接就停止了。看来我越来越近了。
我注意到nginx登录在我的系统上的两个地方,每次攻城显示“连接超时”时,都会有一个返回此消息的错误日志:
file=ext/nginx/HelperAgent.cpp:574 time=2011-09-15 07:43:22.196 ]: Couldn't forward the HTTP response back to the HTTP client: It seems the user clicked on the 'Stop' button in his browser.
发布于 2011-09-15 15:48:01
在HAProxy 配置指南中,您需要增加服务器声明中的maxconn参数。
当服务器具有指定的"maxconn“参数时,这意味着其并发连接的数量将永远不会更高。此外,如果它有一个"minconn“参数,它表示后端加载后的动态限制。然后,服务器将始终接受至少连接,永远不会超过,当后端的连接少于并发连接时,限制将出现在两个值之间的斜坡上。这使得在正常负载期间限制服务器上的负载成为可能,但对于重要的负载,在特殊负载期间不需要重载服务器,就可以将其进一步推进。
我强烈建议阅读整个文件,因为有很多好的信息在那里。
https://serverfault.com/questions/311534
复制相似问题