我并不是一个真正的网络人员,所以请耐心等待。
我目前正在托管一个 Web 应用程序,它会定期向其子网中的所有 IP 地址发送 UDP。总共有 2048 个 IP。我的问题是它会No buffer space available
在一段时间后抛出错误。
我使用sysctl
以下方法调整了一些值:
net.ipv4.neigh.default.gc_thresh1 = 2048
net.ipv4.neigh.default.gc_thresh2 = 4096
net.ipv4.neigh.default.gc_thresh3 = 8192
虽然它确实有效,但严重降低了服务器的响应时间。它是Java
用fit-pc2(1.1ghz、1gb RAM、SD 卡)哦,多么恐怖。
在资源有限的情况下,如何优化服务器/内核参数来解决No buffer space available
问题?
答案1
这不是 sysctl 设置本身的问题,您的服务器正在变慢,因为它必须不断扫描具有 2k 个条目的 arp 表。
值得尝试的事情有:
- 将默认的“arp 缓存超时”从 60 秒增加到 3600 秒。这将使平均 arp 请求率从 34 req / s 降低到 0.5 req / s。
- 将所有感兴趣的 MAC 地址静态添加到 arp 表中
但是,最好的选择是通过路由器将您的服务器与 2k 主机分开。
- 如果你可以从服务器更改 IP,只需将其放在另一个子网中
- 如果你无法更改 IP,你可以将 /21 子网拆分为 /30 子网,然后使用代理 arp 功能将它们粘合在一起