我的 TCP 客户端需要同时连接到数千台服务器(在本地网络中)。通信很简单。10 字节字符串 TCP 请求,20 字节响应。
我有千兆网络。
当客户端逐个连接服务器时没有问题。但是当我同时连接 1000 台服务器时,其他服务器失败并出现错误:通常没有到主机的路由。
我的客户在搭载 i7 的全新 NUC 上运行。我正在调整 TCP 堆栈:
sysctl -w fs.file-max=100000
mtu 500, 3000, 9000
ulimit -n 32000 2000 3000 5000
但没有成功。我所能得到的最好结果是 1800 个连接你知道如何解决这个问题吗?
答案1
我已经设法解决了这个问题,所以让我分享一下如何解决的:使用 dmesg 我发现:
> [145307.501197] neighbour: arp_cache: neighbor table overflow!
> [145307.567830] neighbour: arp_cache: neighbor table overflow!
> [145308.354244] neighbour: arp_cache: neighbor table overflow!
> [145308.479650] neighbour: arp_cache: neighbor table overflow!
所以解决方案是增加 ARP 表:
sysctl -w net.ipv4.neigh.default.gc_thresh1=16000
sysctl -w net.ipv4.neigh.default.gc_thresh2=20000
sysctl -w net.ipv4.neigh.default.gc_thresh3=24000