我们正在使用HA-Proxy version 1.5.11 2015/01/31,从昨天开始,我们注意到通过 https 向我们的服务发出的所有请求都非常缓慢。从 Chrome 开发者控制台,我们可以看到以下时间:
Initial Connection 7.59s
SSL 6.42s
Run Code Online (Sandbox Code Playgroud)
我们测试了套接字统计信息
# ss -s
Total: 2080 (kernel 2088)
TCP: 2674 (estab 2141, closed 433, orphaned 84, synrecv 0, timewait 433/0), ports 0
Run Code Online (Sandbox Code Playgroud)
所以它远低于可能的 65k 端口。
以下是我们的 haproxy.cfg
# Global configuration
global
log 127.0.0.1 local0 notice
maxconn 50000
stats socket /tmp/proxystats level admin
tune.ssl.default-dh-param 2048
#user deploy
#group deploy
#daemon
tune.bufsize 32768
# Default configuration
defaults
log global
mode http
option httplog
option dontlognull
stats enable
stats uri /proxystats
stats auth username:pass
stats realm Haproxy\ Statistics
stats refresh 5s
timeout connect 120000
timeout client 120000
timeout server 120000
option redispatch
option forwardfor
option http-server-close
errorfile 500 /etc/haproxy/errors/503.http
errorfile 502 /etc/haproxy/errors/503.http
errorfile 503 /etc/haproxy/errors/503.http
# HTTP frontend configuration
frontend http
mode http
bind *:80
#redirect scheme https if !{ ssl_fc }
redirect prefix https://myservice.com code 301 if { hdr(host) -i myservice.com }
acl www hdr(host) -i www.myservice.com
acl api hdr(host) -i api.myservice.com
acl browser hdr(host) -i br-rx.myservice.com
use_backend api_server if www
use_backend api_server if api
use_backend browser_receiver if browser
# HTTPs frontend configuration
frontend https
mode http
bind *:443 ssl crt <our .com pem> crt <second domain pem> crt <third domain pem>
redirect prefix https://www.myservice.com code 301 if { hdr(host) -i myservice.com }
use_backend api_server if { ssl_fc_sni www.myservice.com }
use_backend api_server if { ssl_fc_sni api.myservice.com }
use_backend browser_receiver if { ssl_fc_sni br-rx.myservice.com }
Run Code Online (Sandbox Code Playgroud)
系统内CPU和内存正常。 CPU 9.3%, MEM: 335MB
我们还能从哪里开始寻找?
鉴于 Chrome 报告的连接设置时间非常长,这意味着 SYN 数据包被丢弃或至少没有得到应答。这可能在三种情况下发生:
编辑:我刚刚意识到您只更改了全局 maxconn 设置,但没有更改默认设置,因此您的前端仍然限制为 2000 个并发连接(使用 haproxy -vv 检查)。你的 netstat 似乎表明你离这个限制不太远,所以这可能是原因之一。请在默认部分添加 maxconn 指令。