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

不是真正的networking人,所以请忍受我。

我目前正在托pipe一个Web应用程序,它将UDP定期发送到其子网中的所有IP地址。 那是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问题?

这不是sysctl设置,你的服务器正在减速,因为它必须连续扫描2k条目的ARP表。

值得尝试的事情是:

  • 将默认的“arpcaching超时”从60秒增加到3600秒。 这将使平均请求率从34次/秒下降到0.5次/秒。
  • 将所有感兴趣的MAC地址静态添加到arp表中

但是,最好的select是通过路由器将您的服务器与2k主机分开。

  • 如果您可以从服务器更改IP,只需将其置于另一个子网中即可
  • 如果您不能更改IP,则可以拆分/ 21子网的/ 30子网,并使用代理ARPfunction将其粘合