Перейти к содержанию
  • ArcheRAWG
    ArcheRAWG

    ping: sendto: No buffer space available

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

    # 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

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

     




    Обратная связь

    Рекомендуемые комментарии

    Комментариев нет


×
×
  • Создать...