Linux路由器上的最大连接数量很小

我有一个Linux框,充当路由器,没有iptables或其他防火墙,也没有运行networking应用程序,只是纯粹的路由器。 我把它放在一个testing环境中,生成许多TCP连接,每个连接都有唯一的源和目标IP,这些连接通过这个路由器。 我正在观察成功创build的连接数量上升到大约500,然后在几分钟内不能build立更多的连接,然后可以创build另外100个连接,并且还有另一个暂停,等等。 如果创build了每个源 – 目的地对的10个连接,则最大数量会增加10倍,所以问题可能在于来自不同IP的许多连接。

由于stream量是简单的路由,它不必与文件描述符的数量,iptables连接跟踪和其他事情经常提出检查在类似的情况下。 这个盒子有大量可用的RAM和CPU,两个NIC都是千兆位的。 内核是2.6.32。

我已经尝试在两个NIC上增加net.core。* mem_max,net.core.netdev_max_backlog和txqueuelen,完全没有影响。 我还应该检查什么? 内核本身有一些速率限制吗?

目前还不清楚为什么您确定问题不是由您的一个terminal(客户端或服务器)引起的,您生成了哪种types的stream量? 它适用于不同的设备吗?

我find了答案,这很有趣 – ARP表溢出。 testing环境中的stream量来自于直连networking中的很多IP,因此系统必须先使用ARP来查找MAC,而Linux的默认ARP表的硬限制只有1024个条目,连接到两个不同接口的networking之间的连接接近512.当我增加了net.ipv4.neigh.gc_thresh1以及.gc_thresh2和.gc_thresh3,问题就解决了。