ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Astcanary: небольшое HOWTO по канарейкам. =)

Общие вопросы по операционной системе

Модераторы: april22, Zavr2008

Astcanary: небольшое HOWTO по канарейкам. =)

Сообщение defekt » 01 июн 2012, 14:00

Не нашёл на форуме темы, хоть как-то связанной с "канарейками". Решил сунуть в раздел Лялех, ибо, похоже, это в большей степени касается потоков и процессов, а так же их приоритетов, а так же меня, который не понял в сложившейся ситуации, как водиться с астерисковскими канарейками.

Итак:
1. Астер всегда запускал просто и без параметров:
Код: выделить все
root@sag:/home/none# /usr/sbin/asterisk

2. Выхлоп был таков:
Код: выделить все
root@sag:/home/none# ps waux | grep asterisk
root      1463  0.0 10.6 740920 219500 ?       Ssl  May29   0:52 /usr/sbin/asterisk

3. Жалоба юзера (после стабильного uptime - 2-х месячной работы сервака Debian 2.6.32-5-amd64) - не регинится софтфон 3CXPhone (WinXP SP3), "не набирает номер"...
4. Смотрю на процессы:
astcanary.jpeg

Вижу, что завелась "канарейка"...
Вхожу в консоль, стопаю астер - команда проходит, и на этом всё, а именно: процесс не останавливается, с консоли не вываливаюсь в shell... Опа! Машина тупит, так по ssh ничего и не смог сделать.
5. Иду на клаву, пытаюсь остановить Астер в другом сеане - хрена с два. Ребутаюсь... Всё восстановилось (см. п.2).

Почитал сабж на английском.
Решил перевести. Возможно корявенько, но хоть что-то прояснилось...
Хотя, я так и не понял, как же (в пошаговом режиме мож кто в курсе) выйти именно корректно из сложившейся ситуации? Может у кого-то были похожие моменты?
На русских ресурсах (в живых обсуждениях и толксах) ничего не нашёл.

"Что такое Astcanary?"

В основном, это небольшое приложение, которое гарантирует, что в Asterisk нет потоков, которые «текут», и вызывают «загруженность» процессора, и превращает Asterisk-машину, в такую, что не отвечает на запросы.

Это работает так: создаётся файл, когда Asterisk выполняется с приоритетом реального времени (-р). Этот файл должен существовать, и astcanary-процессу должна быть предоставлена ​​возможность продолжать работать, иначе сам Asterisk процесс, в течение короткого периода времени, замедлится сам до регулярного приоритета.


Технические характеристики:

Техническое объяснение в работе этого файла, предполагает следующее: предоставлять гарантии Asterisk, что нет потоков, которые «текут», и вызывают «загруженность» процессора, и превращает Asterisk-машину, в такую, что не отвечает на запросы.
Когда это произойдет («текучка» и «загруженность»), astcanary-процесс будет не в состоянии обновить метки на этот файл, и Asterisk заметит это в течение 120 секунд и отреагирует. Замедление процесса Asterisk до регулярного приоритета позволит администратору вмешаться, тем самым избегая необходимости перезагрузки всей машины.


Откуда же эта идея произошла?

В свое время, канарейки были проведены вместе с шахтерами вниз (в шахту). Их целью было предупредить шахтеров, когда они пробуривались в «газовый метановый карман» или место с другим накоплением вредного вещества. Канарейка, как наиболее чувствительное животное, немедленно падала (задыхались, наглотавшись газа). Видя это, горняки могли бы принять меры, чтобы избежать такую шахту (или как следствие, взрыва метана), видя неминуемую опасность.

Этот же процесс в Астериске служит для той же цели, хотя приоритетом реального времени является причина. Когда поток начинает «убегать с процессором», то, как правило, трудно сказать, какой поток вызвал проблемы, так как машина действует так, будто он «залочен» (на самом же деле, произошло то, что Asterisk работает на более высоком приоритете, чем даже оболочка (shell), так что такая «текучка» нитей процесса занимает все доступное время процессора.
Если это произойдет, то «astcanary-процесс» прекратится, чтобы получить любое процессорное, время, которое мы можем наблюдать с помощью реального времени поток в Asterisk. Если это произойдет, то система мониторинга потока может принять незамедлительные меры замедлить Asterisk до регулярного приоритета, таким образом позволяя администратору входить в систему и перезапустить Asterisk или, возможно, сделать еще один набор действий (таких, как получение обратной трассировки, чтобы разработчики знали, что именно пошло не так).

Обратите внимание, что в соответствии с POSIX.1, все потоки в одном процессе должны иметь один и тот же приоритет, поэтому, когда при мониторинге потоков системой Linux, они (потоки) «исключаются» из числа приоритетов процесса, порождающего эти потоки в этот же момент времени.
Вот почему эта «канарейка» должна существовать как совершенно отдельный процесс, а не просто как нить (поток) в самом Asterisk'е .
Аватар пользователя
defekt
 
Сообщений: 391
Зарегистрирован: 29 сен 2011, 10:41

Re: Astcanary: небольшое HOWTO по канарейкам. =)

Сообщение defekt » 02 июн 2012, 11:45

Рассчитываю, что кто-то из "птицеводов" здесь и появится... Кто в курсе, просьба дополнить до трушного хауту. То, что течёт - ясно, а вот, как цивилизованно разрулить процессы, приоритеты, нити - я пока не знаю. Элементарно ввести pstree как-то не догадался, ибо пропала связь и всем надо было срочно звонить...
Так бы хоть увидел "родство" процессов, а так же ближе к теме и приблизился. Но дополню, если что опять такое засеку.
Задача, собственно такая: как спасти шахтёров и вывести их в безопасное место, когда канарейка врезала дуба?
У меня же, получилось так: канарейка склеила ласты, а шахтёров я специально завалил выработкой (ребутнул сервант), потом откапал и они опять в строю...
Но это явное нарушение техники безопасности на предприятии...
Аватар пользователя
defekt
 
Сообщений: 391
Зарегистрирован: 29 сен 2011, 10:41

Re: Astcanary: небольшое HOWTO по канарейкам. =)

Сообщение defekt » 24 июн 2012, 14:42

Возвращаясь к теме.
Выхлопы после того, как прилетела "канарейка":
Код: выделить все
root@sag:/var/run/asterisk# pstree -p | grep ast
        |-asterisk(1305)-+-astcanary(1306)
        |                |-{asterisk}(1307)
        |                |-{asterisk}(1308)
        |                |-{asterisk}(1309)
        |                |-{asterisk}(1310)
        |                |-{asterisk}(1313)
        |                |-{asterisk}(1314)
        |                |-{asterisk}(1315)
        |                |-{asterisk}(1316)
        |                |-{asterisk}(1317)
        |                |-{asterisk}(1318)
        |                |-{asterisk}(1319)
        |                |-{asterisk}(1359)
        |                |-{asterisk}(1370)
        |                |-{asterisk}(1371)
        |                |-{asterisk}(1372)
        |                |-{asterisk}(1373)
        |                |-{asterisk}(1376)
        |                |-{asterisk}(1377)
        |                |-{asterisk}(1378)
        |                |-{asterisk}(1379)
        |                |-{asterisk}(1380)
        |                |-{asterisk}(1381)
        |                |-{asterisk}(1382)
        |                |-{asterisk}(1383)
        |                |-{asterisk}(1384)
        |                |-{asterisk}(1385)
        |                |-{asterisk}(1386)
        |                |-{asterisk}(1389)
        |                |-{asterisk}(1390)
        |                |-{asterisk}(1391)
        |                |-{asterisk}(1396)
        |                |-{asterisk}(1398)
        |                |-{asterisk}(1399)
        |                |-{asterisk}(1400)
        |                |-{asterisk}(1401)
        |                |-{asterisk}(1402)
        |                |-{asterisk}(1406)
        |                |-{asterisk}(1407)
        |                `-{asterisk}(1408)


Ещё создаётся "костыль" в виде:
Код: выделить все
root@sag:/var/run/asterisk# ls -la
итого 16
drwxr-xr-x 2 asterisk asterisk 4096 Июн 14 18:55 .
drwxr-xr-x 9 root     root     4096 Июн 24 13:15 ..
-rwxrwx--- 1 asterisk asterisk  786 Июн 24 13:23 alt.asterisk.canary.tweet.tweet.tweet
srwxrwx--- 1 asterisk asterisk    0 Июн 14 18:55 asterisk.ctl
-rw-rw---- 1 asterisk asterisk    5 Июн 14 18:55 asterisk.pid

PID:
Код: выделить все
root@sag:/var/run/asterisk# cat asterisk.pid
1305


И поясниловка:
Код: выделить все
root@sag:/var/run/asterisk# cat alt.asterisk.canary.tweet.tweet.tweet
----------------------------------------------------------------------------------------------------------
This file is created when Asterisk is run with a realtime priority (-p).  It
must continue to exist, and the astcanary process must be allowed to continue
running, or else the Asterisk process will, within a short period of time,
slow itself down to regular priority.

The technical explanation for this file is to provide an assurance to Asterisk
that there are no threads that have gone into runaway mode, thus hogging the
CPU, and making the Asterisk machine seem to be unresponsive.  When that
happens, the astcanary process will be unable to update the timestamp on this
file, and Asterisk will notice within 120 seconds and react.  Slowing the
Asterisk process down to regular priority will permit an administrator to
intervene, thus avoiding a need to reboot the entire machine.


На Опеннете пояснили, что такой костыль:
Я не настолько хорошо знаю "потроха" Линукса, чтобы понять, почему это так, но факт остаётся фактом: в Asterisk v1.6 для того, чтобы работающий в RT Mode Asterisk не ставил систему раком, добавили костыль с названием astcanary. Его задача проста -- обновлять timestamp на некоем файле. За этим timestamp'ом следит "основной" Asterisk, и если timestamp на файле отличается от времени внутри Asterisk'а достаточно сильно, Asterisk сбрасывает с себя Real Time Priority. Просто для того, чтобы сисадмин смог зайти на машину и разобраться в ситуации.
На FreeBSD такого не наблюдается (во всяком случае, мне не удавалось это экспериментально смоделировать), на Linux -- запросто (AGI+несколько E1-потоков).
Так что не всё в порядке в королевстве Датском. ;)


Вывод для себя сделал один: перезапуск Астера дабы не ребутать всю систему.
Но на удивление пока всё работает адекватно, в отличие от первого моего поста...
Так что, получается, "канарейка" даёт отсрочку, дабы исправить тех. неполадки Астера.
P.S. На багтраке пишут, что это больше фича, которую описали в версии 1.8.3.3.

Собственно, мини-хауту добил. ;)
Аватар пользователя
defekt
 
Сообщений: 391
Зарегистрирован: 29 сен 2011, 10:41

Re: Astcanary: небольшое HOWTO по канарейкам. =)

Сообщение Sfinx » 25 июн 2012, 10:09

RT режим можно и не включать. Проблема с глюками в этом режиме и как следствие рождение страшного зверя канарейки связана в основном с тем, что астериск-писатели сами свою писанину в этом режиме слабо тестируют (похоже не тестируют вообще). Яркий пример - chan_console, которая работая через pulseaudio легко может завесить астер при работе с USB-audio девайсом.
Rus

-----------
SfinxSoft
http://sfinxsoft.com
Аватар пользователя
Sfinx
 
Сообщений: 672
Зарегистрирован: 21 июн 2011, 23:40
Откуда: Odessa

Re: Astcanary: небольшое HOWTO по канарейкам. =)

Сообщение defekt » 06 авг 2012, 12:38

Режим RealTime, похоже, в моём случае - это режим временный, т.е. реал-тайм отрабатывается около месяца, а потом всё падает в псевдо-реал-тайм. Собственно, в мане на ключи запуска Астера все фичи задокументированы, а именно параметр -р (Run as pseudo-realtime thread) и -U (запуск под юзером Астериск) достпны для юзания и указаны с намёком... ;)
НО у меня возникают сомнения, что, например, в том же коммерческом Switchvox такое случается - я про все эти переходы с реал-тайма в псевдо-реал-тайм. Там, таки, эту багу-фичу уже допилили... А мне, что досталось... :mrgreen:
Аватар пользователя
defekt
 
Сообщений: 391
Зарегистрирован: 29 сен 2011, 10:41

Re: Astcanary: небольшое HOWTO по канарейкам. =)

Сообщение defekt » 03 мар 2013, 14:07

Ещё один случай вышел - посмотрел, оказалось "канарейка" грузится автоматом.
Что сделал - снял автозапуск Астканари, прописал в автозапуск safe_asterisk.
На этом пока всё.
Аватар пользователя
defekt
 
Сообщений: 391
Зарегистрирован: 29 сен 2011, 10:41


Вернуться в Linux

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH