FreeBSD:如何修复“ping:sendto:没有可用的缓冲区空间”?

FreeBSD:如何修复“ping:sendto:没有可用的缓冲区空间”?

我尝试 ping 远程主机,但收到错误。

# ping 192.168.80.1
PING 192.168.80.1 (192.168.80.1): 56 data bytes
ping: sendto: No buffer space available
ping: sendto: No buffer space available
^C
--- 192.168.80.1 ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss

它适用于其他主机:

# ping 192.168.16.1
PING 192.168.16.1 (192.168.16.1): 56 data bytes
64 bytes from 192.168.16.1: icmp_seq=0 ttl=254 time=0.442 ms
64 bytes from 192.168.16.1: icmp_seq=1 ttl=254 time=0.402 ms
^C
--- 192.168.16.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.402/0.422/0.442/0.020 ms
#

“无可用缓冲区空间”消息似乎表示存在某种内存错误。事实上,当我使用 Netstat 检查时,“mbuf 群集”数字看起来非常错误:

# netstat -m
11780 mbufs in use
4294966716/32768 mbuf clusters in use (current/max)
0/3/6656 sfbufs in use (current/peak/max)
1785 KBytes allocated to network
0 requests for sfbufs denied
0 requests for sfbufs delayed
0 requests for I/O initiated by sendfile
0 calls to protocol drain routines

这是怎么回事?有没有办法在不停机的情况下修复此问题,还是需要重新启动主机或重新启动网络接口?

答案1

由于问题似乎仅与一个接口无关——我假设您正在为这两个网络使用普通的旧 C 类掩码——我会快速反弹它:

# ifconfig en0 down
# ifconfig en0 up

显然,您需要在此处替换正确的接口名称en0

您可能必须重新启动侦听该接口的所有服务器,并且当您执行此操作时,使用该接口建立的任何 TCP 连接都将断开。不过,它很简短,所以我并不真正将此类测试视为“停机”。

确保不要在通过 ssh 连接到要弹回的接口上的框中时执行此操作。如果可以的话,执行此操作时最好登录控制台。如果服务器是远程的,则最好使用调制解调器连接,因为弹跳网络接口不会影响串行 getty。如果您必须在通过网络登录时执行此操作,请确保您的连接是通过不同的接口进入的。

相关内容