Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

NET_RX_TX_DROPS Сетевое оборудование и VPN

Анализ потерь пакетов на интерфейсах Linux: RX/TX drops, ethtool и Ring Buffers

Обновлено: 25.08.2026 · Официальная документация ↗
  • Счетчики RX dropped, TX dropped или RX errors в выводе ip -s link непрерывно растут.
  • В dmesg появляются сообщения eth0: rx queue 0 full, packet dropped или переполнение netdev backlog.
  • Падение производительности High-Load серверов (NGINX, Redis, Kafka) при всплесках сетевого трафика (Microbursts).
  • Неравномерная утилизация ядер процессора прерываниями сетевых адаптеров (SoftIRQ bottleneck).

1. Локализация уровня сброса пакетов

В сетевом стеке Linux пакет может быть отброшен на трех уровнях:

  • Hardware / NIC Driver Ring Buffer: переполнение кольцевого буфера сетевой карты до вызова ядра.
  • Kernel Backlog (NAPI / SoftIRQ): ядро не успевает забирать пакеты из очередей подсистемы NAPI.
  • Socket Buffer: переполнение буфера сокета приложения (TCP/UDP Rmem).

2. Диагностика и увеличение Ring Buffers с помощью ethtool

# Просмотр текущих и максимально поддерживаемых размеров буферов RX/TX
ethtool -g eth0

# Увеличение кольцевых буферов до аппаратного максимума (например, 4096)
ethtool -G eth0 rx 4096 tx 4096

3. Анализ переполнения системных очередей ядра (/proc/net/softnet_stat)

# Чтение статистики softnet_stat (вывод в hex)
cat /proc/net/softnet_stat

Значение колонок:

  • 1 колонка: общее количество обработанных пакетов.
  • 2 колонка: количество пакетов, сброшенных из-за переполнения netdev_max_backlog (должно быть 0).
  • 3 колонка: количество раз, когда обработка прерываний завершилась по тайм-ауту netdev_budget.

4. Тюнинг системных параметров в Sysctl

# /etc/sysctl.d/99-network-performance.conf

# Увеличение максимальной очереди входящих пакетов драйвера
net.core.netdev_max_backlog = 10000

# Увеличение кванта времени на обработку пакетов за один цикл прерывания
net.core.netdev_budget = 600
net.core.netdev_budget_usecs = 8000

# Увеличение максимального размера очередей сокетов
net.core.optmem_max = 20485760
net.core.rmem_default = 26214400
net.core.rmem_max = 67108864
sysctl --system

5. Распределение прерываний по ядрам CPU (RSS и RPS)

# Включение многопоточной обработки очередей RSS
systemctl enable --now irqbalance

# Проверка детальной статистики аппаратных очередей сетевой карты
ethtool -S eth0 | grep -E "drop|over|miss|error|buff"
💡 Практика специалистов: При анализе счетчиков 'ethtool -S' всегда обращайте внимание на параметры 'rx_no_buffer_count' или 'rx_missed_errors' — их рост однозначно свидетельствует о переполнении буферов Ring Buffer в момент микро-всплесков трафика (Microbursts).

Частые вопросы (FAQ)

В чем разница между счетчиками 'RX dropped' и 'RX errors' в выводе 'ip -s link'?

'RX errors' указывает на физические ошибки на линии (битые биты, сбои контрольной суммы CRC, повреждение кабеля или SFP модуля). 'RX dropped' означает, что аппаратно целый пакет был выброшен из-за нехватки буферной памяти в операционной системе или драйвере.

Что такое RSS (Receive Side Scaling) на сетевой карте?

RSS — это аппаратная технология сетевых адаптеров, которая распределяет входящие пакеты по нескольким аппаратным очередям на основе хеша (IP, порты), привязывая каждую очередь к отдельному ядру CPU для параллельной обработки прерываний.

Сохраняются ли настройки 'ethtool -G' после перезагрузки сервера?

Нет, команды ethtool сбрасываются после ребута. Для постоянного сохранения добавьте директиву в конфигурационные файлы сетевых интерфейсов (systemd-networkd, netplan или /etc/sysconfig/network-scripts).

Что такое SoftIRQ перегрузка (ksoftirqd)?

Когда частота прерываний превышает возможности ядра, обработка сетевых пакетов перекладывается на системный процесс ksoftirqd/X. Если процесс ksoftirqd утилизирует ядро на 100%, новые входящие пакеты начинают немедленно отбрасываться.

Полезные материалы
Рекомендуем