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

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

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

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

Оптимизация производительности Asterisk: пулы потоков, тюнинг PJSIP и выгрузка модулей

Обновлено: 24.08.2026 · Официальная документация ↗
  • Высокая утилизация CPU (100%) процессом asterisk при относительно небольшом количестве вызовов (100–200 CPS).
  • Задержки при поднятии трубки, «заикание» голосового меню IVR.
  • Ошибки taskprocessor queue reached high watermark в журнале Asterisk.
  • Падение процесса с ошибкой исчерпания файловых дескрипторов Too many open files.

1. Выгрузка неиспользуемых модулей в modules.conf

Уменьшите накладные расходы оперативной памяти и контекстных переключений, отключив устаревшие драйверы в /etc/asterisk/modules.conf:

[modules]
autoload=yes

; Отключение устаревших каналов
noload => chan_sip.so
noload => chan_iax2.so
noload => chan_skinny.so
noload => chan_unistim.so
noload => chan_mgcp.so

; Отключение неиспользуемых драйверов БД и приложений
noload => cdr_csv.so
noload => app_voicemail_imap.so
noload => res_adsi.so
noload => app_festival.so

2. Тюнинг пулов потоков PJSIP (pjsip.conf)

Отредактируйте секцию [system] в /etc/asterisk/pjsip.conf для многоядерных процессоров:

[system]
type=system
threadpool_initial_size=50
threadpool_idle_timeout=60
threadpool_max_size=300
timer_t1=500
timer_b=32000

3. Увеличение системных лимитов (systemd limits)

Создайте оверрайд /etc/systemd/system/asterisk.service.d/override.conf:

[Service]
LimitNOFILE=1048576
LimitNPROC=524288
CPUSchedulingPolicy=rr
CPUSchedulingPriority=10
systemctl daemon-reload && systemctl restart asterisk

4. Мониторинг очередей taskprocessor в CLI

asterisk -rx "core show taskprocessors"
asterisk -rx "pjsip show threadpool"
💡 Практика специалистов: При компиляции Asterisk из исходников всегда отключайте DONT_OPTIMIZE и MALLOC_DEBUG в menuselect, а также используйте компилятор GCC с оптимизацией -O3 и поддержкой инструкций хостового CPU (CFLAGS='-march=native').

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

Что такое taskprocessors в Asterisk?

Taskprocessor — это внутренняя очередь задач Asterisk для асинхронной обработки событий (сигнализация, таймеры, запись). Если очередь переполняется (In-Queue растет), система начинает терять пакеты сигнализации.

Как транскодирование кодеков влияет на производительность CPU?

Транскодирование (например, из G.729 в Alaw или Opus) требует огромных ресурсов процессора. Всегда настраивайте транки и телефоны на использование нативных сквозных кодеков (alaw/ulaw), проверяя статус командой core show translation.

Стоит ли отключать запись CDR/CEL для увеличения производительности?

Прямая синхронная запись каждого чиха в удаленный MySQL блокирует потоки при задержках сети. Лучше использовать адаптивный буфер res_odbc или писать CDR в локальный CSV/SQLite с последующей асинхронной выгрузкой скриптом.

Как перевести логирование Asterisk в высокопроизводительный режим?

В logger.conf отключите debug и verbose на диск, оставив только warning и error. Включите direct_media в PJSIP везде, где абонентам не требуются функции записи и перехвата.

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