调整 Linux TCP 以适应大量 TIME_WAIT

调整 Linux TCP 以适应大量 TIME_WAIT

看起来我们在繁忙的网络服务器上有一堆 tcp 连接,这是 ss -s 的输出:

Total: 366 (kernel 1037)
TCP:   72108 (estab 130, closed 71964, orphaned 0, synrecv 0, timewait 71962/0), ports 46158

Transport Total     IP        IPv6
*     1037      -         -
RAW   0         0         0
UDP   12        8         4
TCP   144       111       33
INET      156       119       37
FRAG      0         0         0

如何最好地调整此服务器上的 TCP 设置以防止出现问题/最大化性能?我最近刚刚将 net/ipv4/ip_local_port_range 从默认值增加到“1024 65000”

答案1

Linux 上的 TCP/IP 堆栈已经非常优化,通常不需要任何操作。例如,设置本地端口范围以获取一些额外端口几乎肯定是不需要的。

就时间/等待时间不好而言,这只是使用 tcp 的一部分。如果您确实希望减少处于该状态的端口数,请更改 tcp_fin_timeout 或 tcp_keepalive 值。尽管您真的不应该更改这些值,除非您出于某种原因确实需要这样做。

就端口耗尽而言,每个端口都以源端口和目标端口为关键。除非您正在执行 nat 之类的操作,否则您可能不会用尽源/目标对。


回应你关于使用 memcached 时连接丢失; 您可以增加工作线程数和积压队列长度。问题更可能出在 memcached 上,而不是可用端口数上。

相关内容