最大连接套接字数与SO_SNDBUF和SO_RCVBUF的值

时间:2013-08-03 11:19:00

标签: c linux tcp

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

2 个答案:

答案 0 :(得分:1)

这不是关于RAM大小,而是关于虚拟内存大小。显然,您不能拥有超过计算机上可用虚拟内存总量的缓冲区。也就是说,如果你发现当你打开三百万个插槽时情况就会开始破坏,你可能最好不要专注于减少插座数量,而不是减少缓冲区大小 - 三百万个插槽是非常多,可能会提出您的架构的其他一些问题。

答案 1 :(得分:0)

假设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万个开放套接字。