VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

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

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

Ответить
Аватара пользователя
defekt
Сообщения: 391
Зарегистрирован: 29 сен 2011, 10:41

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

Сообщение defekt »

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

Итак:
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 »

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

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

Сообщение defekt »

Возвращаясь к теме.
Выхлопы после того, как прилетела "канарейка":

Код: Выделить всё

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.

Собственно, мини-хауту добил. ;)
Аватара пользователя
Sfinx
Сообщения: 672
Зарегистрирован: 21 июн 2011, 23:40
Откуда: Odessa
Контактная информация:

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

Сообщение Sfinx »

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

-----------
SfinxSoft
http://sfinxsoft.com
Аватара пользователя
defekt
Сообщения: 391
Зарегистрирован: 29 сен 2011, 10:41

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

Сообщение defekt »

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

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

Сообщение defekt »

Ещё один случай вышел - посмотрел, оказалось "канарейка" грузится автоматом.
Что сделал - снял автозапуск Астканари, прописал в автозапуск safe_asterisk.
На этом пока всё.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH