Category: Tech articles

  • Увеличиваем размер conntrack таблицы в CentOS Linux

    Многие системные администраторы сталкивались с проблемой, когда количество сетевых соединений с сервером велико, происходит переполнение conntrack таблицы, из-за чего новые соединения не обрабатываются сервером.

    Пример записи в логах указывающих на нехватку количества соединений:

    localhost kernel: ip_conntrack: table full, dropping packet.

    Увеличить размер conntrack таблицы можно через sysctl.

    Размер conntrack таблицы во многих дистрибутивах составляет всего 65536 записей.

    В CentOS 5 посмотреть текущее значение можно так:

    sysctl -a|grep net.ipv4.netfilter.ip_conntrack_max

    Увеличить значение можно через файл /etc/sysctl.conf внеся туда строку:

    net.ipv4.netfilter.ip_conntrack_max = НОВОЕ_ЗНАЧЕНИЕ

    и заставив систему перечитать изменения:
    sysctl -p

    Посмотреть сколько в данный момент записей в conntrack таблице можно так:
    sysctl -a|grep net.ipv4.netfilter.ip_conntrack_count

    В литературе нигде не указываются рекомендованные параметры данной переменной, мои рекомендации следующие:

    Если у Вас нет нехватки оперативной памяти на сервере, то установите значение переменой net.ipv4.netfilter.ip_conntrack_max в 1 миллион записей, и отслеживайте значения количества соединений, постепенно уменьшая значение даной переменной до значения (Максимльное количество соединений) +30%.

    Будьте осторожны, установив заведомо большое количество соединений при малом количестве оперативной памяти в сервере вы рискуете получить в логах сообщения ядра о нехватке оперативной памяти типа:

    localhost kernel: Out of Memory:

    и получить в итоге неуправляемую систему.

    P.S.В дистрибутивах с новыми ядрами (>2.6.20) параметры задающие максимальное количество записей в conntrack таблице называются
    net.netfilter.nf_conntrack_max и net.nf_conntrack_max

    Исчерпывающая информация о conntrack находится здесь

    http://centos.alt.ru/?p=89