如何限制成千上万的TCP连接的缓慢断开?

时间:2018-11-02 09:50:47

标签: sockets go tcp linux-kernel ipv4

我有一个在centos上运行的golang程序,该程序通常已连接约5k tcp客户端。有时,这个数字有时会达到1万5千左右,仍然一切正常。

程序具有慢速关机模式,在该模式下,它将停止接受新客户端,并在20分钟的过程中缓慢杀死所有当前连接的客户端。在这些缓慢的关机期间,如果计算机有15,000个客户端,有时我会得到:

Wed Oct 31 21:28:23 2018] net_ratelimit: 482 callbacks suppressed
[Wed Oct 31 21:28:23 2018] TCP: too many orphaned sockets
[Wed Oct 31 21:28:23 2018] TCP: too many orphaned sockets
[Wed Oct 31 21:28:23 2018] TCP: too many orphaned sockets

我尝试添加:

echo "net.ipv4.tcp_max_syn_backlog=5000" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout=10" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle=1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse=1" >> /etc/sysctl.conf
sysctl -f /etc/sysctl.conf

这些值已设置,我看到了它们的正确新值。典型的sockstat是:

cat /proc/net/sockstat
sockets: used 31682
TCP: inuse 17286 orphan 5 tw 3874 alloc 31453 mem 15731
UDP: inuse 8 mem 3
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0

关于如何阻止过多的孤立套接字错误和崩溃的想法?我应该将20分钟的缓慢关机时间增加到40分钟吗?增加tcp_mem?谢谢!

0 个答案:

没有答案