FreeBSD: Como corrigir “ping: sendto: Não há espaço disponível no buffer”?

27

Estou tentando executar ping em um host remoto, mas recebo um erro.

# 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

Funciona para outros 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
#

A mensagem "Sem espaço disponível no buffer" parece indicar algum tipo de erro de memória. E, de fato, quando eu checo com o Netstat, o número "mbuf clusters" parece MUITO errado:

# 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

O que está acontecendo aqui? Existe algum problema para corrigir isso sem tempo de inatividade ou preciso reiniciar o host ou reiniciar a interface de rede?

Stefan Lasiewski
fonte
11
Você pode postar sua saída dmesg?
Mike H
Eu colei o meu. No meu caso, era um backup que estava entupindo alguma fila em algum lugar, não está claro para mim o porquê - mas suspender e continuar o backup (rsync --bwlimit = 40) corrigiu o problema para nós. Eu também tentei dobrar net.inet.tcp.sendbuf_maxe net.inet.tcp.recvbuf_maxnão mudei nada.
anarcat

Respostas:

11

Como o problema parece isolado em apenas uma interface - presumo que você esteja usando máscaras simples de classe C antiga para essas duas redes -, eu o rejeitaria rapidamente:

# ifconfig en0 down
# ifconfig en0 up

Obviamente, você precisa substituir o nome de interface correto aqui en0.

Pode ser necessário reiniciar qualquer servidor que esteja atendendo a essa interface e as conexões TCP estabelecidas que a utilizarem cairão quando você fizer isso. Porém, é breve, então eu realmente não vejo um teste como "tempo de inatividade".

Certifique-se de não fazer isso enquanto estiver na caixa na interface que você está devolvendo. É melhor fazer login no console quando você fizer isso, se puder. Se o servidor for remoto, é melhor uma conexão de modem, pois o salto das interfaces de rede não afetará as séries de imagens. Se você precisar fazer isso enquanto estiver conectado pela rede, verifique se a conexão está chegando por uma interface diferente.

Warren Young
fonte
4
Bem, acontece que esta interface tinha um cabo Ethernet solto. Apertei o cabo e o erro "Não há espaço disponível no buffer" desapareceu. Agora, preciso descobrir se preciso me preocupar com o número 'mbuf', ou será claro por si só?
Stefan Lasiewski
Infelizmente, o salto da interface não a corrigiu (há várias interfaces nesta máquina, tentei cada uma em sequência e, de repente, esperando que algo liberasse o espaço). Reiniciei a caixa e espero que esse problema não aconteça novamente depois que corrigirmos o cabo.
Stefan Lasiewski
11
Uma atualização 4 anos depois. Sim, preciso me preocupar com o erro mbuf. Este problema aparece ocasionalmente nas minhas caixas do FreeBSD e quase sempre está associado a uma alta carga de rede e, possivelmente, a um cabo com defeito.
Stefan Lasiewski
Saltando consertou para mim.
gravitação
Eu vim aqui especificamente para o OpenBSD 5.8 AMD64 rodando no Cloudstack executando o CentOS6.5 AMD64. Toda vez que a caixa física é interrompida, essa vm não pode sair. Tentei pular a interface e isso não funcionou. Apenas pensei em compartilhar aqui caso outra pessoa seguisse um caminho semelhante. ATUALIZAÇÃO - menos de um minuto depois, ele está funcionando, então talvez isso o conserte.
Danno