Всем доброго утра/дня/вечера/ночи! Давно я не видел утечек памяти в астериске, но тут внезапно появилась такая проблема. И так имеем следующее: 1) FreePBX 2) Кучка кастома для увязки с MSSQL 2012 (ODBC и FreeTDS) и своими скриптами 3) Патченный астер 11.16.0 (Патч https://issues.asterisk.org/jira/browse/ASTERISK-13145) для правильной работы с телефонами Cisco CP-99XX 4) CentOS 6.5 x64 5) Сервер виртуальный на ESXi 5.5, для астера 24 ядра и 12 Гигов оперативки. Выставлен наивысший приоритет на ресурсы. На всем этом память начинает утекать бешеными темпами. Причем не вылетает, дико свопится, начинает тормозить, но в таком состоянии может работать долго (начинается пропадание голоса, заикание). Вопрос, в чем может быть проблема? В патче (код был бегло просмотрен и ничего подозрительно в нем не увидел) или же в самом астере? Прошу помощи у сообщества, уже не знаю что делать.
Задан: 2015-03-23 15:49:11 +0400
Просмотрен: 1,926 раз
Обновлен: Mar 25 '15
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
не подумали просто разделить на несколько серверов и не валить всё в кучу?
Zavr2008 ( 2015-03-23 17:23:59 +0400 )редактироватьне php ли виновато ? а вообще выкидывайте лишние модули и пробуйте связку без патча
awsswa ( 2015-03-23 20:11:38 +0400 )редактироватьЗдесь неплохо было бы вспомнить, после каких действий появились проблемы.
bolshoy_plohish ( 2015-03-24 06:03:19 +0400 )редактироватьРазделить на несколько серверов мысль уже приходила, вот только это очень сильно усложнит и без того не простую схему работы. Телефоны CP-99XX находятся вперемешку с SPA-514g и именно для них накладывался патч, ибо астер из коробки не понимает xml структуру sip от этих телефонов. Лишние модули уже все отключил. На счет кривых php скриптов мысль была, пару раз ошибка была в них, тогда встает вопрос, насколько правильно будет переписывать скрипты от FreePBX? Проблемы начались в самом начале поэтому точки отсчета нет.
Filin ( 2015-03-24 08:00:59 +0400 )редактироватьofftopic. А для скольких абонентов/одновременных разговоров такой монстр?
yks ( 2015-03-24 10:28:54 +0400 )редактироватьоколо 240, ядер много что бы наверняка процессорного времени хватало и на все ядра процессора был наивысший приоритет.
Filin ( 2015-03-24 11:21:15 +0400 )редактироватьХмммм... 240 разговоров это не так много, такого железа должно хватать за глаза, даже с излишком, у меня в гораздо более скромной конфе до 500, но там только транзит и рулежка по транкам на обычных текстовых конфигах, значит сам Астер ни при чем. Наиболее вероятная причина - пхп и кривые выборки из скуля.
CheeZ ( 2015-03-24 12:43:21 +0400 )редактироватьПару раз был краш из-за freetds в результате не отработанного запроса, но запросы тривиальны, ничего сверх большого в них нет. Сейчас заметил, при каждом 'core reload' астер отжирает 0,3% от оперативки.
Filin ( 2015-03-24 13:11:02 +0400 )редактировать"запросы тривиальны, ничего сверх большого в них нет" - а вот тут то может и быть корень проболемы, года у тебя будет простой запрос к большой базе, он у тебя будет перелопачивать каждый раз всю базу.
CheeZ ( 2015-03-24 13:23:11 +0400 )редактироватьчтото вы ерунду какуюто рассказываете. тоесть у вас каждый релоад ест 0.3% от 12Гб мб или 36мбайт оперативки? может у вас есть какието сверхдлинные скрипты на h-exten?
meral ( 2015-03-24 16:35:52 +0400 )редактироватьmeral, именно с каждым релоадом улетает по 0.3%, ну и плюс во время обычной работы, объемы утечки во время звонка сказать не могу, но в целом за неделю все 12 гигов и пару гигов свопа улетает. 2 CheeZ, базы не такие большие, в них хранятся данные о городском номере, мобильном (уже не используется), о транках, CID, email, ФИО, группы вызова, ivr. Все перечисленное лежит по разным таблицам и в каждой таблице не более 700 записей, в итоге при одном запросе данных прилетает копейки, даже если брать всю таблицу целиком. Если предположить что проблема в запросах, не должны ли данные после его отработки выгружаться из ОЗУ? Или же я чего то не докурил?
Filin ( 2015-03-25 12:31:13 +0400 )редактироватьВопрос не в том сколько прилетает в ответ, вопрос сколько перебирается, с этим еще разбираться нужно - простой запрос еще не значит что это оптимальный по расходу памяти и производительности запрос - это раз, и тут товарищ вам еще правильно подсказывает проверить закрытие соеденений.
CheeZ ( 2015-03-25 15:42:54 +0400 )редактироватьh-exten проверил по всем кастомным файлам ничего не заметил, используется только в одном месте. Все запросы идут через func_odbc, скриптов на текущий момент не используется (если не считать стандартных из freepbx).
Filin ( 2015-03-25 17:06:30 +0400 )редактироватьСмотрел кто ест?
ps aux --sort:rss | less
bolshoy_plohish ( 2015-03-25 18:29:57 +0400 )редактироватьда астериск у него ест) он же написал. вообще не вижу проблемы если он локализована(появляется при каждом релоаде). наймите експерта по c/c++ он вам найдет утечку за день. стоить это будет около 1к долларов. других вариантов не вижу.
meral ( 2015-03-25 19:25:31 +0400 )редактировать