Переполнение таблицы conntrack на сервере conntrack table full
ID причины so-conntrack · Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Команда разработки · Разработка сервера, Команда разработки · Разработка клиента
Когда таблица отслеживания соединений (conntrack), в которую файрвол Linux записывает все соединения, достигает лимита, новые пакеты отбрасываются.
Почему Из-за наплыва подключений и множества коротких соединений растёт число записей → Следствие Таблица заполнена, новые соединения и часть пакетов отбрасываются → На экране Ошибка входа, телепортация из-за необъяснимых потерь
Сразу после входа или техработ, При наплыве игроков
Ответственные
Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Команда разработки · Разработка сервера, Команда разработки · Разработка клиента
Команда разработки: задачи
Сервер: сократить короткие соединения (для межсерверных вызовов переиспользовать соединения). Клиент: при неудачном подключении или обрыве увеличивать интервал между повторами и добавлять случайный разброс.
Команда инфраструктуры: задачи
Увеличить размер таблицы (nf_conntrack_max), исключить игровые порты из отслеживания (NOTRACK в таблице raw), настроить алерт по заполненности.
Цифры для ориентира
Лимит по умолчанию в зависимости от памяти сервера составляет примерно от 60 000 до 260 000 записей. При переполнении в журнале ядра появляется «nf_conntrack: table full, dropping packet».
На графике
Упор в лимит (плато) · число записей conntrack (nf_conntrack_count)
Где смотреть
Вывести net.netfilter.nf_conntrack_count из sysctl (текущее число записей) на один график с nf_conntrack_max и найти в dmesg «nf_conntrack: table full, dropping packet»
Подтверждает
nf_conntrack_count выходит на плато на уровне max, и с этого момента в журнале ядра появляется table full
Опровергает
Если число записей далеко от max, причина в другом. Лимит отслеживания соединений самого инстанса AWS проверяют по conntrack_allowance_exceeded (см. «Превышен лимит PPS в облаке»)
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Источники
Netfilter Conntrack Sysfs variablesLinux kernel nf_conntrack_max по умолчанию равен числу бакетов хеш-таблицы (nf_conntrack_buckets), а число бакетов зависит от объёма памяти
net/netfilter/nf_conntrack_core.c (Linux v6.12)Linux kernel Размер по умолчанию 65 536 при памяти больше 1 GB и 262 144 при памяти больше 4 GB (на 64-битных системах). При заполнении пакет отбрасывается с записью «nf_conntrack: table full, dropping packet»