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

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

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

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

Asterisk ended with exit status 139 (Segmentation fault): сбор и анализ Core Dump

Обновлено: 24.08.2026 · Официальная документация ↗
  • Asterisk внезапно падает и перезапускается safe_asterisk с ошибкой Asterisk ended with exit status 139.
  • Все активные телефонные разговоры абонентов моментально обрываются.
  • В системном журнале dmesg регистрируется: asterisk[PID]: segfault at ... ip ... sp ... error 4 in ....
  • Падение происходит при обработке нестандартных SIP пакетов, смене кодеков или под высокой нагрузкой.

1. Включение генерации Core Dumps в safe_asterisk и systemd

Отредактируйте /etc/asterisk/asterisk.conf:

[options]
dumpcore = yes

В юните systemd /etc/systemd/system/asterisk.service.d/override.conf снимите лимиты:

[Service]
LimitCORE=infinity
WorkingDirectory=/tmp
systemctl daemon-reload && systemctl restart asterisk

2. Проверка и поиск сформированного Core Dump

coredumpctl list asterisk
coredumpctl info $(pgrep asterisk || echo "")

3. Анализ стека вызовов через GDB и скрипт ast_debug_tools

Установите утилиты отладки и debuginfo пакеты Asterisk:

apt-get install -y gdb asterisk-dbg || dnf debuginfo-install -y asterisk

Запустите интерактивную отладку упавшего процесса:

coredumpctl debug asterisk

# Внутри интерфейса GDB выполните:
(gdb) set logging on
(gdb) thread apply all bt full
(gdb) quit

4. Автоматическая генерация полного отчета об ошибке

Используйте штатный скрипт Asterisk для формирования баг-репорта:

/usr/src/asterisk/contrib/scripts/ast_debug_tools.sh --dumplist
/usr/src/asterisk/contrib/scripts/ast_debug_tools.sh --core=/tmp/core.asterisk.* --output=/tmp/backtrace.txt
💡 Практика специалистов: Для информативного Backtrace в GDB Asterisk обязательно должен быть скомпилирован с флагами DONT_OPTIMIZE и BETTER_BACKTRACES в menuselect Compiler Flags.

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

Что означает статус завершения 139?

Код 139 означает, что процесс был принудительно завершен ядром Linux по сигналу SIGSEGV (сигнал 11: 128 + 11 = 139) из-за попытки чтения или записи по недопустимому адресу оперативной памяти (Null Pointer Dereference, Use-After-Free).

Как предотвратить падения из-за битых пакетов RTP/SIP?

Обновите Asterisk до актуального LTS-релиза (18.x / 20.x), перейдите с устаревшего chan_sip на res_pjsip и отключите неиспользуемые экспериментальные кодеки в codecs.conf.

Где сохраняются дампы памяти, если coredumpctl не установлен?

Файлы сохраняются в рабочий каталог процесса (обычно /tmp/core* или /var/spool/asterisk/core*) в соответствии с системным шаблоном /proc/sys/kernel/core_pattern.

Как запустить Asterisk под Valgrind для поиска утечек и битой памяти?

Запустите бинарник вручную: valgrind --leak-check=full --log-file=/tmp/valgrind.log /usr/sbin/asterisk -f -vvvg.

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