运行多个Docker虚拟机的服务器将如何处理TCP限制?

dsp*_*099 3 sockets performance tcp docker

在非常繁重的负载下,服务器似乎无法足够快地“回收” TCP连接。

我正在研究使用Docker通过在一台机器上创建节点服务器的多个实例而不是使用多台机器来处理对API的每秒更高数量的请求。

如果设置了以下sysctl设置,则回收似乎确实更快了,但是仍然存在对多少个套接字的硬限制:

net.ipv4.ip_local_port_range='1024 65000'
net.ipv4.tcp_tw_reuse='1'
net.ipv4.tcp_fin_timeout='15
Run Code Online (Sandbox Code Playgroud)

当运行多个Docker实例时,TCP连接的总上限是否仍等于“父”计算机可以处理的最大TCP连接数?

jpe*_*zzo 5

是的,TCP连接的总上限将由Docker主机限制。

但是,存在三个非常不同的限制:

  • 打开连接的总上限(与源/目标IP地址无关)与文件描述符的最大数量有关,并且可能非常高(即数百万)
  • 给定本地IP地址的出站连接总数上限(每个本地IP地址限制为64K)
  • netfilter跟踪的连接总数

TCP端口回收处理第二个限制。如果netstat -nt在主机和容器中使用,则应该能够轻松检查是否接近主机和容器。如果是这样,您使用的系统应该会有所帮助。

如果您的集装箱正在处理外部交通,则不应受到该限制。但是,您可以击中第三名。您可以使用来检查跟踪的连接数conntrack -S,如有必要,可以通过调整提高最大连接数/proc/sys/net/ipv4/netfilter/ip_conntrack_max

指出您所看到的症状是有帮助的,这些症状使您认为服务器没有足够快地回收连接?