Skip to content

Устранение проблем с производительностью и узкими местами ​

RUSEON Core спроектирован для высокоплотного видеостриминга с субмиллисекундной отдачей плейлистов и нулевым копированием кадров. Если вы наблюдаете повышенную нагрузку на CPU, рост памяти или сбросы кадров, используйте это руководство для локализации проблемы.


1. Повышенная нагрузка на CPU ​

В штатном режиме RUSEON Core потребляет минимум процессорных ресурсов, так как выполняет трансмуксинг, а не транскодирование.

Шаги по устранению: ​

  1. Отключение режима Debug: В продакшене убедитесь, что server.debug: false.
  2. Профилирование CPU через pprof: Если включен server.pprof_port: 6060:
    bash
    go tool pprof -top http://localhost:6060/debug/pprof/profile?seconds=30
  3. Визуализация памяти в реальном времени (Statsviz): Откройте http://localhost:8080/debug/statsviz/ в браузере для просмотра живых графиков горутин, кучи и сборщика мусора.

2. Рост памяти и настройка сборщика мусора (GC) ​

Если потребление оперативной памяти растет:

  1. Тонкая настройка GC в config.yaml: RUSEON Core поддерживает прямое управление параметрами памяти Go:
    yaml
    server:
      gc_percent: 50              # Целевой процент GOGC
      gc_memory_limit_mb: 2048    # Мягкий лимит памяти GOMEMLIMIT
  2. Разделение RSS процесса и Page Cache ядра:
    bash
    # Реальная память процесса RUSEON
    ps -aux | grep ruseon
    
    # Кеш страниц ОС
    free -h
    RUSEON автоматически сбрасывает страницы из RAM через вызовы POSIX_FADV_DONTNEED.

3. Сбросы буфера (ruseon_ringbuffer_drops_total) ​

Если в Prometheus растет счетчик ruseon_ringbuffer_drops_total:

  • Причина: Потребитель (медленный WebRTC-клиент или медленный диск) не успевает вычитывать кадры.
  • Защита: RingBuffer отбрасывает P-кадры только для этого подписчика и ждет ключевой I-кадр, сохраняя общую стабильность системы.
  • Решение: Проверьте пропускную способность сети до клиента или скорость записи дискового накопителя.

Связанная документация ​

Released under the MIT License.