FreeBSD: Wie behebe ich “ping: sendto: No buffer space available”?

27

Ich versuche, einen Remote-Host zu pingen, erhalte jedoch eine Fehlermeldung.

# 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

Es funktioniert für andere Hosts:

# 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
#

Die Meldung "Kein Pufferplatz verfügbar" weist auf einen Speicherfehler hin. Und tatsächlich, wenn ich bei Netstat nachschaue, sieht die "mbuf cluster" Nummer SEHR falsch aus:

# 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

Was geht hier vor sich? Gibt es eine Möglichkeit, dies ohne Ausfallzeiten zu beheben, oder muss ich den Host neu starten oder die Netzwerkschnittstelle neu starten?

Stefan Lasiewski
quelle
1
Können Sie Ihre Dmesg-Ausgabe veröffentlichen?
Mike H
Ich habe meine eigenen geklebt. In meinem Fall war es eine Sicherung, die irgendwo eine Warteschlange verstopfte. Mir ist nicht klar, warum - aber das Unterbrechen und Wiederaufnehmen der Sicherung (rsync --bwlimit = 40) hat das Problem für uns behoben. Ich habe auch versucht zu verdoppeln net.inet.tcp.sendbuf_maxund net.inet.tcp.recvbuf_maxnichts geändert.
Anarcat

Antworten:

11

Da das Problem nur auf eine Schnittstelle beschränkt zu sein scheint - ich gehe davon aus, dass Sie für diese beiden Netzwerke einfache alte Klasse-C-Masken verwenden -, würde ich es einfach schnell auf den Prüfstand stellen:

# ifconfig en0 down
# ifconfig en0 up

Offensichtlich müssen Sie hier den korrekten Schnittstellennamen für ersetzen en0.

Möglicherweise müssen Sie alle Server neu starten, die diese Schnittstelle überwachen, und alle TCP-Verbindungen, die diese Schnittstelle verwenden, werden abgebrochen, wenn Sie dies tun. Es ist jedoch kurz, so dass ich einen solchen Test nicht wirklich als "Ausfallzeit" betrachte.

Stellen Sie sicher, dass Sie dies nicht tun, während Sie sich in der Box auf der Schnittstelle befinden, auf der Sie sich gerade befinden. Melden Sie sich am besten an der Konsole an, wenn Sie dies tun. Wenn der Server remote ist, ist eine Modemverbindung am besten, da das Bouncen der Netzwerkschnittstellen keine Auswirkungen auf serielle Verbindungen hat. Wenn Sie dies tun müssen, während Sie über das Netzwerk angemeldet sind, stellen Sie sicher, dass Ihre Verbindung über eine andere Schnittstelle eingeht.

Warren Young
quelle
4
Nun, es stellte sich heraus, dass diese Schnittstelle ein loses Ethernet-Kabel hatte. Ich habe das Kabel festgezogen und der Fehler "Kein Pufferplatz verfügbar" wurde behoben. Jetzt muss ich herausfinden, ob ich mir um die 'mbuf'-Nummer Sorgen machen muss, oder wird sie von alleine klar sein?
Stefan Lasiewski
Leider hat sich das Problem durch das Bouncen der Schnittstelle nicht behoben (es gibt mehrere Schnittstellen auf diesem Computer, ich habe jede nacheinander und dann auf einmal ausprobiert, in der Hoffnung, dass etwas den Speicherplatz freigibt). Ich habe die Box neu gestartet und hoffe, dass dieses Problem nicht wieder auftritt, nachdem wir das Kabel repariert haben.
Stefan Lasiewski
1
Ein Update 4 Jahre später. Ja, ich muss mir über den mbuf-Fehler Gedanken machen. Dieses Problem taucht gelegentlich auf meinen FreeBSD-Boxen auf und ist fast immer mit einer hohen Netzwerklast und möglicherweise mit einem fehlerhaften Kabel verbunden.
Stefan Lasiewski
Das Hüpfen hat es für mich behoben.
Gravitation
Ich bin speziell für OpenBSD 5.8 AMD64 hierher gekommen, das auf Cloudstack läuft und CentOS6.5 AMD64 ausführt. Jedes Mal, wenn die physische Box unterbrochen wird, kann diese VM nicht aussteigen. Ich habe versucht, das Interface zu bouncen und das hat nicht funktioniert. Ich dachte nur, ich würde hier teilen, falls jemand anderes einen ähnlichen Weg beschreitet. UPDATE - weniger als eine Minute später funktioniert es, also kann es vielleicht behoben werden.
Danno