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 cluster」數字看起來非常錯誤:

# 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。如果您必須在透過網路登入時執行此操作,請確保您的連線是透過不同的介面進入的。

相關內容