Jump to content

ping: sendto: No buffer space available


ArcheRAWG

Recommended Posts

Если вы увидели такое сообщение на сервере, значит пришло время посмотреть и оценить сетевую нагрузку на сервер. Посмотреть текущее состояние буферов можно так:

# netstat -m
1026/2709/3735 mbufs in use (current/cache/total)
1024/1766/2790/132096 mbuf clusters in use (current/cache/total/max)
1024/768 mbuf+clusters out of packet secondary zone in use (current/cache)
0/802/802/66048 4k (page size) jumbo clusters in use (current/cache/total/max)
0/0/0/33024 9k jumbo clusters in use (current/cache/total/max)
0/0/0/16512 16k jumbo clusters in use (current/cache/total/max)
2304K/7417K/9721K bytes allocated to network (current/cache/total)
0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
0/0/0 requests for jumbo clusters denied (4k/9k/16k)
0/0/0 sfbufs in use (current/peak/max)
0 requests for sfbufs denied
0 requests for sfbufs delayed
15 requests for I/O initiated by sendfile
0 calls to protocol drain routines

или

# vmstat -z | grep mbuf
mbuf_packet: 256, 0, 1024, 768, 9163111497, 0
mbuf: 256, 0, 2, 1941, 6166886673, 0
mbuf_cluster: 2048, 132096, 1792, 998, 14208, 0
mbuf_jumbo_page: 4096, 66048, 0, 802, 166262704, 0
mbuf_jumbo_9k: 9216, 33024, 0, 0, 0, 0
mbuf_jumbo_16k: 16384, 16512, 0, 0, 0, 0
mbuf_ext_refcnt: 4, 0, 0, 672, 11055, 0

Так же можно ещё посмотреть количество коллизий на интерфейсах:

# netstat -id

Если кратко объяснить, что оно такое: нехватка системных буферов для выполнения операций. Как правило такая проблема появляться на плохих сетевых карточках и не всегда зависит от большой нагрузки. К примеру, я наблюдал такую ситуацию, когда в кроне выставлен пинг (8 пакетов) на хост каждый 5 минут и за сутки появлялось такое сообщение на шлюзе, который обслуживает 20 человек с каналом загрузки до 10мбит.

Но что же сделать, что бы избавиться от этого раз и навсегда? Самый правильный способ — поставить хорошие сетевые карточки, например, Intel (igb). Второй вариант даёт результат с вероятностью 50%. Он представляет собой небольшой тюниг переменных системы и ядра. Опишу его ниже.

— увеличиваем количество nmbclusters и буферов:

echo 'kern.ipc.nmbclusters=524288' >> /boot/loader.conf
echo 'kern.ipc.maxsockbuf=1048576' >> /boot/loader.conf
echo 'hw.igb.rxd=4096' >> /boot/loader.conf
echo 'hw.igb.txd=4096' >> /boot/loader.conf

где igb — имя сетевой карты, на которой возникают проблемы (если у вас другая — замените соответственно на другое имя)

Примечание.

На 64-битных системах с большим объёмом памяти можно выставить значения kern.ipc.nmbclusters=1000000

— увеличиваем размер буфера

net.inet.tcp.sendbuf_max=16777216
net.inet.tcp.recvbuf_max=16777216
net.inet.tcp.sendbuf_inc=16384
net.inet.tcp.recvbuf_inc=524288

— увеличиваем количество пользователей и значение буферов

пересобираем ядро с такими параметрами
 

maxusers        512
options         NBUF=4096

Если вы используете netgraph, можно ещё увеличить такие значения:

net.graph.maxdgram=524288
net.graph.recvspace=524288

Если же после этого тюнинга продолжают появляться такие ошибки — попробуйте либо увеличить значения либо поставить всё же нормальную сетевую карточку.

 

 

Открыть запись

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...