FreeBSD: Как исправить «ping: sendto: нет свободного места в буфере»?

27

Я пытаюсь пропинговать удаленный хост, но получаю ошибку.

# 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
Можете ли вы опубликовать свой вывод dmesg?
Майк Х
Я вставил свой собственный. В моем случае это была резервная копия, которая где-то засоряла какую-то очередь, мне непонятно, почему - но приостановка и возобновление резервного копирования (rsync --bwlimit = 40) устранили проблему для нас. Я также пытался удвоить net.inet.tcp.sendbuf_maxи net.inet.tcp.recvbuf_maxничего не изменил.
Анаркат

Ответы:

11

Поскольку проблема кажется изолированной только для одного интерфейса - я предполагаю, что вы используете обычные старые маски класса C для этих двух сетей - я бы просто быстро отскочил:

# ifconfig en0 down
# ifconfig en0 up

Очевидно, вам нужно заменить правильное имя интерфейса здесь en0.

Возможно, вам придется перезапустить любые серверы, прослушивающие этот интерфейс, и любые установленные TCP-соединения, использующие его, будут прерваны при этом. Это коротко, поэтому я не рассматриваю такой тест как «простои».

Не делайте этого, пока ssh'd в поле интерфейса, который вы подпрыгиваете. Лучше всего войти в консоль, если вы это сделаете. Если сервер удаленный, лучше всего использовать модемное соединение, так как переадресация сетевых интерфейсов не повлияет на последовательные соединения. Если вы должны сделать это, войдя в сеть по сети, убедитесь, что ваше соединение идет через другой интерфейс.

Уоррен Янг
источник
4
Ну, оказывается, у этого интерфейса был свободный кабель Ethernet. Я затянул кабель, и ошибка «Нет свободного места в буфере» исчезла. Теперь мне нужно выяснить, нужно ли мне беспокоиться о числе «mbuf», или оно будет очищено само по себе?
Стефан Ласевский
К сожалению, отскок интерфейса не устранил его (на этой машине несколько интерфейсов, я пробовал каждый из них последовательно, а затем все сразу, надеясь, что что-то освободит пространство). Я перезагрузил коробку, и, надеюсь, эта проблема больше не повторится после того, как мы исправим кабель.
Стефан Ласевский
1
Обновление 4 года спустя. Да, мне нужно беспокоиться об ошибке mbuf. Эта проблема иногда всплывает в моих коробках FreeBSD и почти всегда связана с высокой нагрузкой на сеть и, возможно, с неисправным кабелем.
Стефан Ласевский,
Отскок исправил это для меня.
гравитация
Я пришел сюда специально для OpenBSD 5.8 AMD64, работающей на Cloudstack под управлением CentOS6.5 AMD64. Каждый раз, когда физическая коробка прерывается, этот vm не может выйти. Я попытался сбросить интерфейс, и это не сработало. Просто подумала, что поделюсь здесь, если кто-то пойдет по тому же пути ОБНОВЛЕНИЕ - менее чем через минуту он работает, так что, возможно, это все исправит.
знаю