没有可用的缓冲区空间,并使用 sysctl 进行调整

没有可用的缓冲区空间,并使用 sysctl 进行调整

我并不是一个真正的网络人员,所以请耐心等待。

我目前正在托管一个 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

虽然它确实有效,但严重降低了服务器的响应时间。它是Javafit-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 功能将它们粘合在一起

相关内容