首页 文章

Haproxy中的TIME_WAIT数量很多

提问于
浏览
3

我们在CentOS 5.9机器上托管了haproxy 1.3.26,它具有2.13 GHz Intel Xeon处理器,作为许多服务的http和tcp负载均衡器,提供~2000请求/秒的峰值吞吐量 . 它已经运行了2年,但逐渐流量和服务数量都在增加 .

我们观察到,即使在重新加载旧的haproxy过程后仍然存在 . 在进一步调查中,我们发现旧进程在TIME_WAIT状态下有许多连接 . 我们还看到 netstatlsof 需要很长时间 . 在提到http://agiletesting.blogspot.in/2013/07/the-mystery-of-stale-haproxy-processes.html时,我们介绍了 option forceclose ,但它搞乱了各种监控服务,因此还原了它 . 经过进一步挖掘,我们意识到,在 /proc/net/sockstat 接近200K插座是否 twTIME_WAIT )状态作为 /etc/haproxy/haproxy.cfg maxconn 已被指定为31000和 ulimit-n 为64000 . 我们有 timeout server 和这是令人惊讶 timeout client300s 我们改为 30s 但不很多用途 .

现在的疑虑是: -

1 回答

  • 8

    注意:此答案中的引用全部来自a mail by Willy Tarreau(HAProxy的主要作者)到HAProxy邮件列表 .

    TIME_WAIT 状态中的连接是无害的,并且不再消耗任何资源 . 它们由服务器上的内核保留一段时间,以便在连接关闭后仍然收到包的罕见事件 . 在该状态下保持关闭连接的默认时间通常为120秒(或最大段生命周期的2倍)

    TIME_WAIT在服务器端是无害的 . 您可以毫无问题地轻松达到数百万 .

    如果您仍希望减少该数字以便更早地释放连接,则可以指示内核执行此操作 . 例如,设置为30秒执行:

    echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
    

    如果你有很多连接(无论是否在TIME_WAIT中), netstatlsofipcs 执行得非常糟糕,实际上会降低整个系统的速度 . 再次引用威利:

    在监控系统中绝对不能使用两个命令:netstat -a ipcs -a它们都会使系统饱和,并在出现问题时大大降低速度 . 对于套接字,您应该使用/ proc / net / sockstat中的内容 . 你有你想要的所有数字 . 如果您需要更多详细信息,请使用ss -a而不是netstat -a,它使用netlink接口,速度要快几个数量级 .

    在Debian和Ubuntu系统上, ssiproute2 包中提供了 ss (取决于您的发行版的版本) .

相关问题