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

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

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

VOIP_UDP_BUFFER_OVERFLOW IP-Телефония и СКУД

Диагностика потерь пакетов RTP/SIP на виртуальных интерфейсах IP-АТС

Обновлено: 24.08.2026 · Официальная документация ↗
  • Прерывание голоса (робот, заикание, пропадание слов) при отсутствии видимых потерь в локальной сети.
  • Рост счетчиков packet receive errors и buffer errors в выводе netstat -su.
  • Логи ядра фиксируют отбрасывание сетевых очередей (drop_monitor, tc -s qdisc).
  • Высокий джиттер (Jitter > 30ms) при одновременной обработке более 100 активных RTP-потоков.

1. Проверка потерь и переполнения очередей сокетов ядра

# Анализ системной статистики сетевого стека UDP
netstat -su

# Проверка дропов на кольцевых буферах сетевого адаптера (Ring Buffers)
ethtool -S eth0 | grep -E "drop|overrun|miss|error"

# Мониторинг очередей сокетов в реальном времени
ss -u -a -n -p -m

2. Тюнинг сетевого стека Linux под High-Load RTP (Sysctl)

Создайте файл конфигурации /etc/sysctl.d/99-voip-udp-tuning.conf:

# Максимальный и базовый размер буфера приема сокета UDP (в байтах) - 32MB
net.core.rmem_max = 33554432
net.core.rmem_default = 8388608

# Максимальный и базовый размер буфера отправки сокета UDP - 32MB
net.core.wmem_max = 33554432
net.core.wmem_default = 8388608

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

# Размеры буферов для UDP (min, default, max в страницах памяти)
net.ipv4.udp_mem = 65536 131072 262144
net.ipv4.udp_rmem_min = 16384
net.ipv4.udp_wmem_min = 16384

Примените настройки:

sysctl --system

3. Увеличение Ring Buffers сетевой карты

Виртуальные сетевые адаптеры (VirtIO, VMXNET3) часто запускаются с минимальными буферами по умолчанию:

# Просмотр текущих и максимальных лимитов
ethtool -g eth0

# Установка максимума для очередей RX/TX
ethtool -G eth0 rx 4096 tx 4096

4. Оптимизация виртуализации и привязка прерываний (IRQ Affinity)

  • Отключите энергосберегающие состояния CPU (C-States / P-States) на хосте гипервизора (настройка Performance Mode).
  • Выделите виртуальной машине IP-АТС выделенные non-oversubscribed ядра CPU (CPU Pinning).
  • Настройте демон irqbalance или вручную привяжите очереди прерываний vNIC к свободным ядрам.
💡 Практика специалистов: Для высоконагруженных шлюзов Kamailio/OpenSIPS обязательно компилируйте демоны с поддержкой epoll/kqueue и увеличивайте число дочерних воркеров обработки UDP (параметр `children=N`), чтобы сокет не блокировался одним системным потоком.

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

Почему netstat -su показывает рост 'packet receive errors' при низкой загрузке CPU?

Служба телефонии (например, Asterisk) не успевает вычитывать входящие RTP фреймы из выделенного сокету буфера SO_RCVBUF до прихода следующей пачки данных, что вызывает мгновенное переполнение очереди и сброс пакетов на уровне ядра.

Как виртуализация KVM/VMware влияет на джиттер UDP в VoIP?

При оверселлинге vCPU виртуальная машина испытывает задержки планировщика (CPU Ready / Steal Time). Если vCPU приостанавливается даже на 20-30 мс, буфер UDP переполняется, а клиенты фиксируют выпадение пачек аудиофреймов.

Как проверить потери UDP на конкретном SIP-порту 5060?

Используйте ss: ss -ulpn '( sport = :5060 )'. Обратите внимание на колонки Recv-Q и Send-Q. Если Recv-Q постоянно не равен нулю, приложение блокируется и не успевает обрабатывать сигнальные сообщения.

Помогает ли включение Jumbo Frames для RTP-трафика?

Нет, VoIP использует микропакеты: полезная нагрузка кодека G.711 (20ms) составляет всего 160 байт + заголовки (всего около 214 байт). Jumbo Frames не дают преимуществ для RTP и могут привести к нежелательной фрагментации.

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