LINUX.ORG.RU
решено ФорумAdmin

Freeradius 3.0.17 + python2 скрипт зависает через несколько часов работы

 


0

1

Имеется кластер из 3х хостов с freeradius для аутентификации телефонии. Необходимо было в сжатые сроки внедрить в него взаимодействие с антифродом. Все было сделано на коленке с использованием exec и пары bash скриптов. Когда ркн был удовлетворен, встал вопрос по оптимизации системы. Было решено использовать модуль python. Переписал на питоне и после пары неудачных запусков все заработало на ура. Утилизация цпу упала, пауза при вызове заметно уменьшилась. Но через несколько часов работы скрипт встал колом. Ну т.е. он перестает отвечать на запросы радиуса. На любые - на авторизацию, на аккаунтинг. Естественно, все запросы при этом радиус начинает отвергать. Консультировался с опытными разработчиками на питоне. Код одобрен, все исключения учтены. Но увы - никакие новые доработки не принесли улучшений. Пришлось вернуться к скриптам на bash. Я конечно догадываюсь, что обновление радиуса и питона скорее всего решат проблему. Но это боевой кластер и упражняться на нем нельзя. Пробовал имитировать нагрузку в песочнице - нет, не повторяется. Пробовал делать некий watchdog который по разнице во времени между логами радиуса и скрипта производит перезапуск первого. Но не работает - когда ночью нагрузка рандомно падает, то появляются ложные срабатывания и иногда после этого радиус вовсе не запускается. Так вот, существует ли в freeradius какая-то опция которая заставит модуль python загружать скрипт на каждый запрос, а не загружать его в память раз и навсегда? Похоже проблема именно в том, что он загружается единожды при старте и дальше с ним происходит какая-то деградация (скорее всего память утекает).

Так вот, существует ли в freeradius какая-то опция которая заставит модуль python загружать скрипт на каждый запрос, а не загружать его в память раз и навсегда?

выделил вопрос тса из стены, ответ скорее всего легко гуглится; и не решит проблему тса

отладка на проде ок, загадочно что шевелить булками стали только сейчас, сколько уже бабулек и дедулек развела служба поддержки сбера

anonymous
()
Ответ на: комментарий от anonymous

Не беспокойтесь за бабулек. Все было запущено еще весной. Просто только сейчас дошли руки. Так то вариант с exec работает без нареканий. Но в случае миграции радиуса и постгреса на один хост теоретически могут возникнуть вопросы с производительностью.

evgeny_oleynikov
() автор топика

Вообще, скрипт на питоне можно запустить и через exec. Переделать недолго. В любом случае запустить python менее накладно чем скрипт на bash в котором еще запускаются всякие grep и awk (это сколько же там оболочек матрешкой запускается?)

А впрочем, я придумал два других решения - одно как гарантировать правильную работу watchdog, в второе - как перезапускать радиус при неответе скрипта.

Тем не менее всем откликнувшимся спасибо. Иногда для решения проблемы достаточно, чтобы кто-то выслушал.

evgeny_oleynikov
() автор топика

Как уже правильно сказали, python2 довольно старый

И в некоторых старых дистрибутивах сборщик мусора в 2.7 работает не очень хорошо. Перенос сервиса на актуальную ОСь (а приложения на python3) скорее всего решит проблему

Но если нужен именно вариант с watchdog, почитай https://habr.com/ru/post/209446/ . Статья старая, но очень полезная

router ★★★★★
()

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

пусть freeradius запускает не python, а bash с одним

curl -X POST http://auth.domain.ltd/

http://auth.domain.ltd это контенейрезированный сервис которым вы можете управлять как угодно (хоть HA сделать) добавлять туда python 3.11 или любой другой язык программирования и экспериментировать.

gagarin0
()