没有可用的缓冲区空间 - ICMP

没有可用的缓冲区空间 - ICMP

我正在尝试在 Linux 计算机(CentOS Linux 版本 7.3.1611)上设置 Heartbeat 客户端,该客户端向大约 1300 个主机发送 ICMP 回显请求。然而,未来这个数字将会更高。 Heartbeat 生成的消息将被发送到另一台服务器上的 Logstash 实例。

这些请求每 3 分钟一次发出一次。第一轮请求后,大量此类消息包含错误:

"write ip4 0.0.0.0->x.x.x.x: sendto: no buffer space available"

我尝试了多种方法来缓解此问题,包括错开请求,以减少 1 秒内发出的请求。这导致了该管道末尾的数据同步问题(并且没有完全解决问题),因此这对我来说并不是一个真正可行的选择。

在线研究使我增加了系统分配给 TCP/IP 连接的内存,但据我所知,这些是 ICMP 请求,应该是分开的。

我也无法恢复网络接口,因为机器是远程的,而且我没有办法返回来将其恢复。

我还测试了增加(并设置为 0) /proc/sys/net/ipv4 中的 icmp_ratelimit 变量,但这也没有帮助。

我的问题很笼统,什么可能导致这个问题?我是否需要在系统上调整某种变量,以允许这些请求同时发出?我无法真正推断出错误消息引用的缓冲区。

任何帮助将不胜感激...

PS:如果需要进一步说明,我很乐意提供。

编辑


仍然不确定其他地方是否存在故障,但是增加由 wmem_max、wmem_default、rem_max、rem_default 变量确定的套接字缓冲区的大小已经/proc/sys/net/core解决了该问题。所有 ICMP 回显请求的数据总大小可能太大,无法低于之前的最大值 208kb,因此其中大量数据将被丢弃。并没有真正解释为什么丢弃的请求数量每次都会有所不同,也许存在潜在的问题......

现在我唯一的问题是,每次重新启动系统时,这些变量都会重置为 208kb。如何使这些更改持久存在?

相关内容