Многие системные администраторы сталкивались с проблемой, когда количество сетевых соединений с сервером велико, происходит переполнение 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 находится здесь