net_ratelimit: callbacks suppressed — Борьба со штормом сетевых ошибок Linux
Архитектура ошибки и симптомы сбоя
Предупреждение «net_ratelimit: callbacks suppressed due to packet drop storm» генерируется функцией ядра __ratelimit() в сетевой подсистеме. Оно указывает на то, что сетевой драйвер или стек IP генерирует критически высокий объем диагностических сообщений об ошибках (сброс пакетов, поврежденные заголовки, ошибки контрольных сумм, блокировки фаервола). Чтобы предотвратить зависание сервера из-за 100% загрузки процессора записью логов в dmesg / journald, ядро временно подавляет вывод однотипных сообщений.
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| net_ratelimit() | Log Throttling Mechanism | Функция защиты системного журнала от флуда сетевыми сообщениями. |
| net.core.message_cost | 5 (seconds, default) | Стоимость одного сообщения (интервал сброса токенов в алгоритме Token Bucket). |
| net.core.message_burst | 10 (messages, default) | Максимальное количество сообщений, разрешенных к непрерывному выводу. |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Локализация первопричины сетевых сбросов (Packet Drops)
Определите, на каком уровне происходят реальные потери сетевых пакетов:
# Анализ аппаратных и программных сбросов на интерфейсе:
ethtool -S eth0 | grep -E "(drop|error|miss|discard|overrun)"
# Проверка статистики сетевого стека по протоколам:
netstat -s | grep -E "(dropped|overflow|error)"Сценарий 2: Увеличение размера кольцевых буферов сетевой карты (Ring Buffers)
В большинстве случаев шторм сбросов вызван переполнением входного RX буфера сетевой карты:
# Просмотр текущих и максимальных лимитов буферов:
sudo ethtool -g eth0
# Установка максимальных значений кольцевого буфера (например, 4096):
sudo ethtool -G eth0 rx 4096 tx 4096Сценарий 3: Настройка параметров ограничения частоты логирования
Если вам временно требуется увидеть все скрытые сообщения для глубокой отладки:
# Увеличение лимита вывода сообщений:
sudo sysctl -w net.core.message_burst=100
sudo sysctl -w net.core.message_cost=1ITSTM выполнит оптимизацию сетевого стека ядра, настройку очередей multiqueue, RSS/RPS/RFS и устранит потери пакетов под любыми нагрузками.
Частые вопросы (FAQ)
Опасна ли сама по себе ошибка callbacks suppressed?
Само сообщение не является ошибкой — это защитный механизм ядра. Опасность представляет причина, вызвавшая подавление: сетевой шторм, аппаратные сбои кабеля, атака или массовый сброс пакетов фаерволом.
Как понять, какие именно сообщения были подавлены?
Подавленные сообщения идентичны тем, которые выводились непосредственно перед строкой net_ratelimit: callbacks suppressed (например, nf_conntrack: table full или drop open request).
Как навсегда сохранить настройки ethtool -G rx 4096?
В Ubuntu/Debian добавьте директиву post-up ethtool -G eth0 rx 4096 в /etc/network/interfaces, либо используйте systemd-networkd / NetworkManager диспетчерские скрипты.
Что такое NAPI poll budget в контексте packet drop storm?
Параметр net.core.netdev_budget задает максимальное число пакетов, которое ядро может обработать за один цикл прерывания NAPI. При штормах увеличьте его со 300 до 600 командой sysctl -w net.core.netdev_budget=600.