最大连接sockets数量与SO_SNDBUF和SO_RCVBUF的值

我在一台Linux机器上有超过三百万个文件描述符,所以我看看socket缓冲区大小与RAM大小的关系会限制机器可以处理的同时tcp连接的最大数量。 如果您有类似的经验,请告知。 谢谢。

这不是关于内存大小,而是关于虚拟内存的大小。 显然你不能有超过计算机上可用的虚拟内存总量的缓冲区。 也就是说,如果你发现在有三百万个插座的情况下事情开始中断,那么你可能最好把注意力集中在减少插座的数量上,而不是减少缓冲器的大小 – 三百万个插座是可怕的是,可能会提出一些与你的架构有关的其他问题。

假设Linux默认发送和接收缓冲区大小与几年前一样:

3,000,000 x 43,689 + 3,000,000 x 16384 = 180,219,000,000 = 175,995,117 Kb = 171870 Mb = 167 Gb 

这确实相当多。 除非你真的有这么多的虚拟内存,并且确实可用的地址空间,否则你不会达到300万个打开的套接字。