FreeBSD: Comment réparer «ping: sendto: aucun espace tampon disponible»?

27

J'essaie d'envoyer une requête ping à un hôte distant, mais j'obtiens une erreur.

# 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

Cela fonctionne pour d'autres hôtes:

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

Le message «Aucun espace tampon disponible» semble indiquer une sorte d'erreur de mémoire. Et en effet, lorsque je vérifie avec Netstat, le nombre de "clusters mbuf" semble TRÈS faux:

# 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

Qu'est-ce qui se passe ici? Est-il possible de résoudre ce problème sans interruption de service, ou dois-je redémarrer l'hôte ou redémarrer l'interface réseau?

Stefan Lasiewski
la source
1
Pouvez-vous publier votre sortie dmesg?
Mike H
J'ai collé le mien. Dans mon cas, c'était une sauvegarde qui obstruait une file d'attente quelque part, je ne comprends pas pourquoi - mais suspendre puis reprendre la sauvegarde (rsync --bwlimit = 40) a résolu le problème pour nous. J'ai aussi essayé de doubler net.inet.tcp.sendbuf_maxet je n'ai net.inet.tcp.recvbuf_maxrien changé.
anarcat

Réponses:

11

Étant donné que le problème semble isolé pour une seule interface - je suppose que vous utilisez de vieux masques de classe C pour ces deux réseaux - je le ferais rapidement rebondir:

# ifconfig en0 down
# ifconfig en0 up

Évidemment, vous devez remplacer ici le nom d'interface correct en0.

Vous devrez peut-être redémarrer tous les serveurs qui écoutent sur cette interface, et toutes les connexions TCP établies l'utilisant tomberont lorsque vous effectuez cette opération. C'est bref, cependant, donc je ne considère pas vraiment un tel test comme un "temps d'arrêt".

Assurez-vous de ne pas le faire pendant que vous êtes dans la boîte de l'interface que vous rebondissez. Il est préférable de vous connecter sur la console lorsque vous faites cela, si vous le pouvez. Si le serveur est distant, une connexion par modem est préférable, car le rebond des interfaces réseau n'affectera pas les gettys série. Si vous devez le faire lorsque vous êtes connecté sur le réseau, assurez-vous que votre connexion arrive via une interface différente.

Warren Young
la source
4
Eh bien, il s'avère que cette interface avait un câble Ethernet lâche. J'ai resserré le câble et l'erreur «Aucun espace tampon disponible» a disparu. Maintenant, je dois déterminer si j'ai besoin de m'inquiéter du nombre 'mbuf', ou est-ce que ça va disparaître de lui-même?
Stefan Lasiewski
Malheureusement, le rebondissement de l'interface ne l'a pas corrigé (il y a plusieurs interfaces sur cette machine, j'ai essayé chacune en séquence, puis tout à la fois, en espérant que quelque chose libérerait l'espace). J'ai redémarré la box, et j'espère que ce problème ne se reproduira pas après avoir réparé le câble.
Stefan Lasiewski
1
Une mise à jour 4 ans plus tard. Oui, je dois m'inquiéter de l'erreur mbuf. Ce problème apparaît parfois sur mes boîtiers FreeBSD et est presque toujours associé à une charge réseau élevée, et éventuellement à un câble buggy.
Stefan Lasiewski
Le rebond l'a réparé pour moi.
gravitation
Je suis venu ici spécifiquement pour OpenBSD 5.8 AMD64 fonctionnant sur Cloudstack exécutant CentOS6.5 AMD64. Chaque fois que la boîte physique est interrompue, cette VM ne peut pas sortir. J'ai essayé de faire rebondir l'interface et cela n'a pas fonctionné. Je pensais juste partager ici au cas où quelqu'un d'autre emprunterait un chemin similaire. MISE À JOUR - moins d'une minute plus tard, cela fonctionne, alors peut-être que cela le résout.
danno