我有一个运行Debian 7(proxmox)的OpenVZ容器的遗留系统,我看到一个麻烦的问题,系统被运行apache前端的VZ容器的打开连接淹没。
发生这种情况时,服务器上的日志将填充数千个“TCP:时间等待桶表溢出(CT233)”错误。 这与来自networking服务器的缓慢响应相结合。 有什么我可以做的,以缓解这个问题?
经过Googlesearch,我已经对各种conntrack设置做了一些调整,但是我不愿意做任何过激的事情,而没有更好地理解这些影响可能是什么(或者,实际上这是否可能有助于任何情况)
想知道情况是什么,这里是今天发生这种情况时“sysctl -a | grep conntrack”的输出:
net.netfilter.nf_conntrack_generic_timeout = 480 net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120 net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60 net.netfilter.nf_conntrack_tcp_timeout_established = 345600 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60 net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120 net.netfilter.nf_conntrack_tcp_timeout_close = 10 net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300 net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300 net.netfilter.nf_conntrack_tcp_loose = 1 net.netfilter.nf_conntrack_tcp_be_liberal = 0 net.netfilter.nf_conntrack_tcp_max_retrans = 3 net.netfilter.nf_conntrack_udp_timeout = 30 net.netfilter.nf_conntrack_udp_timeout_stream = 180 net.netfilter.nf_conntrack_icmp_timeout = 30 net.netfilter.nf_conntrack_acct = 0 net.netfilter.nf_conntrack_events = 1 net.netfilter.nf_conntrack_events_retry_timeout = 15 net.netfilter.nf_conntrack_max = 131072 net.netfilter.nf_conntrack_count = 128397 net.netfilter.nf_conntrack_buckets = 32768 net.netfilter.nf_conntrack_checksum = 1 net.netfilter.nf_conntrack_log_invalid = 0 net.netfilter.nf_conntrack_expect_max = 256 net.nf_conntrack_max = 131072
这包括我今天做出的一些改变:我将nf_conntrack_buckets从16384加倍到32768,我把conntrack_generic_timeout从600s缩短到了480s,并且我从5d缩小了conntrack_tcp_timeout_established到4d。
在任何时候,绝大多数开放连接都在TIME_WAIT中。
我希望有一些有更多的TCP /内核调优知识的人比我可以推荐。
谢谢!
我最终调整了两个其他variables,每个variables加倍:“net.ipv4.tcp_max_tw_buckets”和“net.ipv4.tcp_max_tw_buckets_ub”,并且由于使这些变化“时间等待桶表溢出”错误没有再次发生。 然而,我会在下周左右的时间里关注这个问题,看看这个问题是否真的解决了。