Недавно у нас возникла проблема с тем, что один из наших серверов (Debian Squeeze) перестал отвечать во время большой нагрузки. Глядя на журналы ядра, я думаю, что это причина:
kernel: nf_conntrack: table full, dropping packet
Насколько я понимаю, это модуль conntrack, который выполняет отслеживание соединения с отслеживанием состояния, сообщая, что таблица, используемая для хранения деталей соединения, заполнена.
Судя по проведенным мною исследованиям, есть два способа смягчить это:
Увеличьте размер таблицы.
Полностью удалить модуль из системы.
Однако ни /proc/sys/net/ipv4/ip_conntrack_max
ни /proc/sys/net/ipv4/netfilter/ip_conntrack_max
существуют на этой машине (нет ipv4
каталог под net
).
Если я сделаю lsmod
Я не получаю результатов.
Итак, я немного запутался - может, кто-нибудь прояснит мне ситуацию?
Спасибо
Это из опыта - я не проводил исследований, чтобы проверить эту информацию: я видел несколько систем, в которых такая же ошибка присутствует в системных журналах. и ничего нет в / proc / sys / net / ipv4 / ip_conn * или / proc / sys / net / ipv4 / netfilter. Я также хотел бы знать, почему - но это не останется очень важным, если вы найдете решение для первоначальных симптомов. ;)
Стратегия смягчения последствий была двоякой: увеличение лимита с помощью sysctl (наивный краткосрочный подход) и выяснение того, почему количество отслеживаемых соединений так велико.
Если пределы по умолчанию превышаются и рассматриваемый сервер не предназначен для обработки большого количества подключений, то разумно, что ограничения вообще не должны нарушаться. Хорошим примером службы, которая будет иметь высокие требования к отслеживанию соединений, является «общедоступный» DNS-сервер, обслуживающий более ста тысяч клиентов.
Чтобы избежать этого, необходимо изучить журналы, убедиться, что приняты меры защиты от DOS / DDOS (например, см. Fail2ban), и убедиться, что у вас установлена разумная конфигурация межсетевого экрана.
Что касается lsmod, я не сталкивался с ситуацией, когда он выглядел бы активным, но модуль не указан. Я не знаю, как возникает такая ситуация.
Настройки для conntrack часто находятся в / proc / sys / net / netfilter / nf_conntrack_max.