我有 1 个域和 3 个 IP 地址。每个地址(1 个服务器)都安装了一个 HAProxy 服务器。除了 HAProxy 之外,每个服务器还运行了 10 个 nodejs 进程。
问题是大约有 40% 的请求处于待处理状态。有时请求处理得非常快(大约 160 毫秒),有时需要大约 5 秒甚至超时。服务器负载相当低(所有 8 个核心运行约 30%),平均负载为 2
我进行了一些谷歌搜索,发现我可能已经用完了 HAProxy 接受连接的端口(我对此不太确定)
我运行ss -s
,输出是
Total: 69452 (kernel 69571)
TCP: 106031 (estab 67813, closed 36404, orphaned 570, synrecv 0, timewait 36264/0), ports 0
Transport Total IP IPv6
* 69571 - -
RAW 0 0 0
UDP 15 9 6
TCP 69627 69620 7
INET 69642 69629 13
FRAG 0 0 0
和我的sysctl.conf
vm.overcommit_memory = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2
kernel.shmmax = 17179869184
kernel.shmall = 4194304
net.ipv4.ip_local_port_range = 1025 65000
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_max_syn_backlog = 3240000
net.core.somaxconn = 3240000
net.ipv4.tcp_max_tw_buckets = 1440000
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_congestion_control = cubic
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
我还尝试直接连接到每个应用服务器,看看是否是该应用导致了待处理的请求。但这不是应用服务器的问题,当我直接连接到应用服务器时,它仍然响应得非常快
我已经启用日志,我会尽快更新 haproxy 外观
更新:我收集了一些有关缓慢请求的信息http://pastebin.com/wvApfi6E
答案1
好吧,原来我已经达到网络接口的速度限制了。升级后,一切恢复正常