Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Высокая загрузка CPU и отладка asterisk

0

День добрый. Суть такова: asterisk 1.6 (из сквизи), sip клиенты в mysql, самих клиентов не много - около 45. Время от времени asterisk начинает грузить ядро процессора на 100%. При этом отваливаются клиенты. В syslog ничего криминального. Были мысли на то, что mysql начинает тупить, но это крайне маловероятно, т.к. клиенты кэшируются. Как можно отладить работу asterisk и найти узкой место? Может ли ошибка в dialplan-е (бесконечный цикл например) привести к высокой загрузке?

удалить закрыть спам изменить тег редактировать

спросил 2012-03-01 10:31:46 +0400

andy-none Gravatar andy-none
56 25 7 25

обновил 2012-03-05 16:45:53 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Comments

а какая версия 1.6?

Zavr2008 ( 2012-03-05 21:54:02 +0400 )редактировать

1.6.2.9

andy-none ( 2012-03-06 11:54:15 +0400 )редактировать

7 Ответов

2

смотрите во время сильной загрузки в консоль астера с максимальным verbose, может и циклический диалплан имеет место...

ссылка удалить спам редактировать

ответил 2012-03-01 12:29:41 +0400

switch Gravatar switch
8334 11 7 92
http://lynks.ru/
0

Интересно чем закончилось дело. У меня похожая ситуация. Повышение disk i/o отмечается munin. Как понять что это именно в нем дело? Как бы не сталкивался с такими вещами.

сегодня опять проявилась проблема. iotop в порядке, сетевой активности нет. куча процессов астериска + astcanary гугл не помог. При этом:

core show channels

Channel              Location             State   Application(Data)             
SIP/mangosip-0000091 (None)               Up      AppDial((Outgoing Line))      
Local/7411122@outgoi s@macro-dialout:25   Up      Dial(SIP/mangosip/74957411122,
Local/7411122@outgoi 7411122@outgoing:1   Up      (None)  

 sip show channels - пусто

taskprocessors

        +----- Processor -----+--- Processed ---+- In Queue -+- Max Depth -+
               app_queue               21877            0            5
   core_event_dispatcher               21885            0            4
           app_voicemail                   0            0            0
                pbx-core               21880            0            4
        +---------------------+-----------------+------------+-------------+
        4 taskprocessors

threads

0x7fc5bebc0700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be09a700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be116700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be192700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be20e700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be28a700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be306700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be382700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be3fe700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be47a700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be4f6700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be7de700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be572700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be85a700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be8d6700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be6e6700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5beb42700 handle_tcptls_connection started at [  280] tcptls.c ast_tcptls_server_root()
0x7fc5be762700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5bea4a700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be952700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5be9ce700 netconsole           started at [ 1333] asterisk.c listener()
0x7fc5beac6700 mixmonitor_thread    started at [  467] app_mixmonitor.c launch_monitor_thread()
0x7fc5becb8700 pbx_thread           started at [ 4583] pbx.c ast_pbx_start()
0x7fc5be66a700 mixmonitor_thread    started at [  467] app_mixmonitor.c launch_monitor_thread()
0x7fc5be5ee700 pbx_thread           started at [ 4583] pbx.c ast_pbx_start()
0x7fc5bed34700 handle_tcptls_connection started at [  280] tcptls.c ast_tcptls_server_root()
0x7fc5bec3c700 autoservice_run      started at [  209] autoservice.c ast_autoservice_start()
0x7fc5bedb0700 network_thread       started at [11749] chan_iax2.c start_network_thread()
0x7fc5bee2c700 iax2_process_thread  started at [11739] chan_iax2.c start_network_thread()
0x7fc5beea8700 iax2_process_thread  started at [11739] chan_iax2.c start_network_thread()
0x7fc5bef24700 iax2_process_thread  started at [11739] chan_iax2.c start_network_thread()
0x7fc5befa0700 iax2_process_thread  started at [11739] chan_iax2.c start_network_thread()
0x7fc5bf01c700 iax2_process_thread  started at [11739] chan_iax2.c start_network_thread()
0x7fc5bf098700 iax2_process_thread  started at [11739] chan_iax2.c start_network_thread()
0x7fc5bf114700 iax2_process_thread  started at [11739] chan_iax2.c start_network_thread()
0x7fc5bf190700 iax2_process_thread  started at [11739] chan_iax2.c start_network_thread()
0x7fc5bf20c700 iax2_process_thread  started at [11739] chan_iax2.c start_network_thread()
0x7fc5bf288700 iax2_process_thread  started at [11739] chan_iax2.c start_network_thread()
0x7fc5bf304700 sched_run            started at [  179] sched.c ast_sched_thread_create()
0x7fc5bf380700 scan_thread          started at [  524] pbx_spool.c load_module()
0x7fc5bf3fc700 tps_processing_function started at [  451] taskprocessor.c ast_taskprocessor_get()
0x7fc5bf478700 do_monitor           started at [ 3491] chan_mgcp.c restart_monitor()
0x7fc5bf4f4700 do_monitor           started at [ 1144] chan_phone.c restart_monitor()
0x7fc5bf570700 do_monitor           started at [ 9822] chan_dahdi.c restart_monitor()
0x7fc5bf5ec700 lock_broker          started at [  490] func_lock.c load_module()
0x7fc5bf668700 do_monitor           started at [ 4607] chan_unistim.c restart_monitor()
0x7fc5bf6e4700 process_clearcache   started at [ 2268] pbx_dundi.c start_network_thread()
0x7fc5bf760700 process_precache     started at [ 2267] pbx_dundi.c start_network_thread()
0x7fc5bf7dc700 network_thread       started at [ 2266] pbx_dundi.c start_network_thread()
0x7fc5bf858700 tps_processing_function started at [  451] taskprocessor.c ast_taskprocessor_get()
0x7fc5e4089700 do_monitor           started at [22746] chan_sip.c restart_monitor()
0x7fc5e4105700 desc->accept_fn      started at [  486] tcptls.c ast_tcptls_server_start()
0x7fc5e4181700 do_timing            started at [  482] res_timing_pthread.c init_timing_thread()
0x7fc5e74dc700 do_parking_thread    started at [ 4683] features.c ast_features_init()
0x7fc5e7558700 tps_processing_function started at [  451] taskprocessor.c ast_taskprocessor_get()
0x7fc5e75d4700 do_devstate_changes  started at [  727] devicestate.c ast_device_state_engine_init()
0x7fc5e7650700 inotify_daemon       started at [  295] stdtime/localtime.c add_notify()
0x7fc5e76cc700 desc->accept_fn      started at [  486] tcptls.c ast_tcptls_server_start()
0x7fc5e9d65700 logger_thread        started at [ 1018] logger.c init_logger()
0x7fc5e9de1700 listener             started at [ 1393] asterisk.c ast_makesocket()
0x7fc5e9e5d700 tps_processing_function started at [  451] taskprocessor.c ast_taskprocessor_get()
0x7fc5e9ed9700 canary_thread        started at [ 3566] asterisk.c main()

IAX был запрещен в sip.conf, но модуль я выгрузил, в конфиге прописал чтобы не загружался. в консоли астериска команды reload и core restart now эффекта не дали - загрузка процессора осталась.

Пришлось делать рестарт asterisk.

Asterisk 1.6.2.9-2+squeeze6 built by pbuilder @ boomtime on a x86_64 running Linux on 2012-06-05 09:26:56 UTC
Ядро:    Linux 2.6.32-custom x86_64
ОС:      Debian  GNU/Linux  6.0.5
ссылка удалить спам редактировать

ответил 2012-09-25 20:11:34 +0400

SIlverJoe Gravatar SIlverJoe
26 3 1 8

обновил 2012-09-30 17:58:51 +0400

Comments

iotop

?

komrad123 ( 2012-09-26 00:27:01 +0400 )редактировать

сегодня не наблюдал проблему. соотв. iotop в порядке. Предполагаю ДДОС по порту AMI, так как на сегодня я AMI отключил. буду переносить порт высоко-высоко и дополнять защиту на iptables

SIlverJoe ( 2012-09-26 21:46:21 +0400 )редактировать
1

Запретить iax2 из sip.conf это, конечно, высший пилотаж... Но я к примеру всегда перезагружаю астериск ночью, в часы минимальной нагрузки.

switch ( 2012-09-30 18:31:21 +0400 )редактировать

кто сказал что в sip.conf? а, пардон, я про hasiax = no Модуль выгружен по всем правилам командой и прописан noload в module.conf

SIlverJoe ( 2012-09-30 18:54:38 +0400 )редактировать

Рестарт не спасает. Была ситуация, когда рестарт астериска по крону в 6 утра, а в 10 он уже висит. Работа сервиса начинается с 9 утра. И до вечера потом он работает нормально.

SIlverJoe ( 2012-10-09 13:05:35 +0400 )редактировать
0

уберите все места где у вас ringgroup или queue с больше чем 5-6 абонентами одновременно звонит.

ссылка удалить спам редактировать

ответил 2012-03-01 19:04:56 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Comments

У меня только линейные очереди. ringall не использую...

andy-none ( 2012-03-02 14:43:08 +0400 )редактировать

точно не FreePBX?

Zavr2008 ( 2012-03-02 15:39:56 +0400 )редактировать

Нет конечно.

andy-none ( 2012-03-05 10:07:49 +0400 )редактировать
0

для начала откройте список процессов и посмотрите какой процесс грузит проц. Это может быть и не астериск, на какой системе стоит астер?

ссылка удалить спам редактировать

ответил 2012-03-02 16:11:38 +0400

Злобный Мыш Gravatar Злобный Мыш
292 13 5 16

Comments

как обнаружите процесс - в линухах есть такая хорошая команда как cpulimit. Позволяет установить предельную загрузку проца для конкретного процесса.

asdev ( 2012-03-05 09:27:48 +0400 )редактировать

Система debian, * из репозитария сквизи. Грузит процесс asterisk. cpulimit не поможет, т.к. asterisk не раскидывает треды по ядрам процессора. Жрет тупо одним процессом все ядро. Так что толку от cpulimit мало. И кстати, был подключен модуль jabber. Быть может проблема заключалась в нем. Пока буду следить за ситуацией. Было бы замечательно если бы в * была какая-нибудь фича, которая позволяла анализировать статистику использования ресурсов конкретным модулем.

andy-none ( 2012-03-05 10:07:21 +0400 )редактировать

А что говорит консоль астера? Там обычно все видно. Опять же проверить диалплан на цикличность.

Злобный Мыш ( 2012-03-05 10:53:25 +0400 )редактировать

в астериске такой фичи нет. ибо редко очень надо. и кому надо занют как сделать. зато gbd это умеет. вот и используйте средства си-отладки если квалификации хватает. мне вот както не очень хватает.потому рекомендую обновить астериск и повыключать по очереди модули - посмотреть.

meral ( 2012-03-05 11:47:53 +0400 )редактировать
0

Судя по всему проблема заключалась в модуле jabber. Отключил - полет нормальный.

ссылка удалить спам редактировать

ответил 2012-03-06 09:43:11 +0400

andy-none Gravatar andy-none
56 25 7 25
0

Ребята, нашел истинную причину высокой загрузки. Заключается она в MixMonitor. DialPlan такой:

[out-kt]
include => office
exten => _9.,1,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN})
exten => _9.,n,MixMonitor(/home/asterisk/records/${fname}.wav)
exten => _9.,n,Dial(SIP/kt-3616/${EXTEN},30,T)

Какие мысли по этому поводу?

ссылка удалить спам редактировать

ответил 2012-03-06 11:53:25 +0400

andy-none Gravatar andy-none
56 25 7 25

обновил 2012-03-06 11:53:48 +0400

Comments

наверно disk i/o?

meral ( 2012-03-06 14:43:55 +0400 )редактировать

может декодирование ? все клиенты на каком нибуть g729 - а пишите в wav - вот процессора и не хватает.

awsswa ( 2012-09-26 07:15:28 +0400 )редактировать

ipp кодеки жрут мало. Не винт ли накрываетцо.. Попробуй писать в /tmp

Zavr2008 ( 2012-09-26 21:12:50 +0400 )редактировать

вопервых ты некромант.а во вторых какой винт? просто там 100500 файликов в каталоге.

meral ( 2012-10-02 01:09:25 +0400 )редактировать

почему он некромант? :) а насчет файлов подтверждаю - при заполнеении диска всего на 14% и куче свободных инодов, почему то при достижении кол-ва файлов в папке /var/spool/monitor/ примерно 7000, начинает выеживаться астериск с такими вот загрузками проца. Похоже MixMonitor вешается. Для проверки вынес оттуда 1000 файлов - все работало ок, пока опять примерно 7000 не набежало. Не знаю, мне не особо верится, как то необосновано. Но факт.

SIlverJoe ( 2012-10-09 13:03:08 +0400 )редактировать

на дату вопроса глянь. не "почемуто" а потомучто надо инфу в дириктории считать.

meral ( 2012-10-09 13:18:15 +0400 )редактировать

ты не обижайся, я дотошный :) У людей и миллион файлов накапливается, так проблема в том что иноды кончаются а не мегабайты и при этом сервисы работают (до момента истощения инодов). Вопрос в другом уже как они папки очищают, но в данном случе же понятно что надо записи сортировать по папкам, а еще лучше дерево папок делать, месяц-неделя-дни недели, или месяц-число ну кому как нравиться.

Но суть то в чем - причина зависания астера именно в этом? Потому что уже нарыл как миниму две причины возникновения такой ситуации

SIlverJoe ( 2012-10-09 15:49:34 +0400 )редактировать

от файловой системы зависит. ext3 не любит много файлов. но при это мпоказывать будет system load а не астериск.

meral ( 2012-10-09 16:00:24 +0400 )редактировать

с аттрибутом noatime примонтировать отдельный раздел видимо не судьба.. В /tmp тоже =))

Zavr2008 ( 2012-10-10 22:42:22 +0400 )редактировать

просто на embedded системах мы сталкиваемся с подобными проблемами гораздо чаще, есть и стандартные пути решения...

Zavr2008 ( 2012-10-10 22:42:59 +0400 )редактировать
0

у меня такая же хрень, грузит cpu asterisc 100%, не пойму в чем дело, у меня факсы через него ходят в примонтированную папку, и MixMonitor для сжатия в mp3 стоит

ссылка удалить спам редактировать

ответил 2013-09-23 10:46:14 +0400

Roman1111 Gravatar Roman1111
1 1

Comments

Сочувствуем.

zzuz ( 2013-09-23 11:25:28 +0400 )редактировать

купить еще комп и вынести на него всякую обработку факсов и кодирование mp3 - совсем не сложно...

Zavr2008 ( 2013-09-25 15:42:26 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2012-03-01 10:31:46 +0400

Просмотрен: 6,096 раз

Обновлен: Sep 23 '13

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.