roma33rus Posted June 10, 2019 Posted June 10, 2019 Всем привет. Начали мы значит запускать у себя Freeradius DHCP, постепенно. Пользователей через радиус включил около 100. И раз в несколько дней, радиус захлебывается с такими сообщениями: Sun Jun 9 22:41:16 2019 : Error: 297 requests have been waiting in the processing queue for 38 seconds. Check that all databases are running properly! Sun Jun 9 22:41:16 2019 : Error: Unresponsive child for request 107175, in component post-auth module perl Sun Jun 9 22:41:16 2019 : WARNING: (106763) WARNING: Module rlm_perl became unblocked Sun Jun 9 22:41:16 2019 : Error: Unresponsive child for request 107183, in component post-auth module perl Sun Jun 9 22:41:17 2019 : WARNING: (106767) WARNING: Module rlm_perl became unblocked Sun Jun 9 22:41:17 2019 : Error: 299 requests have been waiting in the processing queue for 38 seconds. Check that all databases are running properly! Sun Jun 9 22:41:17 2019 : Error: Unresponsive child for request 107188, in component post-auth module perl Sun Jun 9 22:41:17 2019 : WARNING: (106774) WARNING: Module rlm_perl became unblocked Sun Jun 9 22:41:17 2019 : Error: Unresponsive child for request 107196, in component post-auth module perl Sun Jun 9 22:41:18 2019 : WARNING: (106779) WARNING: Module rlm_perl became unblocked Sun Jun 9 22:41:18 2019 : Error: 301 requests have been waiting in the processing queue for 38 seconds. Check that all databases are running properly! Sun Jun 9 22:41:18 2019 : Error: Unresponsive child for request 107202, in component post-auth module perl Sun Jun 9 22:41:19 2019 : WARNING: (106790) WARNING: Module rlm_perl became unblocked При чем может двое суток нормально проработать, а может и сутки. Как только перезапускаю службу, то тут же становится все нормально. alive у пользователей в таком случае стоит 10 минут. Версия радиус 3.0.19. В mysql бешенной нагрузки не наблюдалось. И самое интересное, что в момент начала проблемы у радиуса начинается жор памяти: Куда ему вообще столько памяти, когда он работает только как dhcp? Вот приложил конфиги: abills_default dhcp perl radiusd.conf Perl кстати скомпилирован без -Dusethreads. Может в этом причина? Подскажите пожалуйста, куда в какую сторону вообще смотреть в таком случае? Может радиус какие старые данные не очищает и копит их в памяти. Вставить ник Quote
NewUse Posted June 10, 2019 Posted June 10, 2019 эмм, а что у Вас на rlm_perl? а вообще, судя по симптомам виснут соединения между БД и ФР... Вставить ник Quote
roma33rus Posted June 10, 2019 Author Posted June 10, 2019 2 часа назад, NewUse сказал: эмм, а что у Вас на rlm_perl? а вообще, судя по симптомам виснут соединения между БД и ФР... Выдача адресов. Вообще радиус у меня работает в связке с абиллсом. да бд вроде нормально себя чувствует. в моменты ошибок в ФР, ошибок в бд нет. да и странно то, что ФР может впасть в ступор в любое время, и когда нагрузки мало и когда много. По сути, если бы проблема в бд была, то радиус отваливался бы каждый раз, когда нагрузка возрастала бы? Вставить ник Quote
roma33rus Posted June 10, 2019 Author Posted June 10, 2019 Вот сейчас сколько потребляет, сейчас все хорошо работает. Вставить ник Quote
taf_321 Posted June 10, 2019 Posted June 10, 2019 3 часа назад, roma33rus сказал: Выдача адресов. Вообще радиус у меня работает в связке с абиллсом. да бд вроде нормально себя чувствует. в моменты ошибок в ФР, ошибок в бд нет. да и странно то, что ФР может впасть в ступор в любое время, и когда нагрузки мало и когда много. По сути, если бы проблема в бд была, то радиус отваливался бы каждый раз, когда нагрузка возрастала бы? Где-то у вас race condition зарылся. У вас адрес в пуле каким образом для клиента выбирается и резервируется? Вставить ник Quote
roma33rus Posted June 10, 2019 Author Posted June 10, 2019 16 минут назад, taf_321 сказал: Где-то у вас race condition зарылся. У вас адрес в пуле каким образом для клиента выбирается и резервируется? Адрес клиенту мы привязываем статически, либо с привязкой по МАК адресу, либо с привязкой к коммутатору и порту. Резерв ведется в базе на основе поднятой сессии биллинга. Если абонент успешно получает ip адрес, то биллинг, заносит связку в базу и поднимает сессию. Кстати сейчас alive на абонентов стоит 10 минут (то есть каждые 5 минут абонент продляет аренду ip), по логике биллинга сессия через 1 час закрывается и удаляется. Только вот сейчас по истечении 1 часа неактивности абонента сессия нифига не закрывается. Где-то в этой степи и кроется проблема может? Вставить ник Quote
NewUse Posted June 10, 2019 Posted June 10, 2019 3 часа назад, roma33rus сказал: Выдача адресов. Вообще радиус у меня работает в связке с абиллсом. да бд вроде нормально себя чувствует. в моменты ошибок в ФР, ошибок в бд нет. да и странно то, что ФР может впасть в ступор в любое время, и когда нагрузки мало и когда много. По сути, если бы проблема в бд была, то радиус отваливался бы каждый раз, когда нагрузка возрастала бы? ну так зачем перл, делайте чере rlm_sql напрямую... вечером посмотрю перл-конфиг, но вроде бы Вам перл нафиг не нужен... Вставить ник Quote
roma33rus Posted June 10, 2019 Author Posted June 10, 2019 10 минут назад, NewUse сказал: ну так зачем перл, делайте чере rlm_sql напрямую... вечером посмотрю перл-конфиг, но вроде бы Вам перл нафиг не нужен... У нас так биллинг работает стандартно. Настройка по их руководству проходила. Вставить ник Quote
NewUse Posted June 10, 2019 Posted June 10, 2019 4 часа назад, roma33rus сказал: да и странно то, что ФР может впасть в ступор в любое время, и когда нагрузки мало и когда много. По сути, если бы проблема в бд была, то радиус отваливался бы каждый раз, когда нагрузка возрастала бы? я говорил о возможных проблемах сети/сокетов, именно связи, а не БД/радиуса в отдельности, коннекшен таймаут стоит в настройках перлового драйвера к бд? Вставить ник Quote
roma33rus Posted June 10, 2019 Author Posted June 10, 2019 13 минут назад, NewUse сказал: я говорил о возможных проблемах сети/сокетов, именно связи, а не БД/радиуса в отдельности, коннекшен таймаут стоит в настройках перлового драйвера к бд? в файле rlm_perl.pl есть такая строчка на подключение к базе и таймаута там нет: my $db = Abills::SQL->connect($conf{dbtype}, $conf{dbhost}, $conf{dbname}, $conf{dbuser}, $conf{dbpasswd}); Вставить ник Quote
NewUse Posted June 10, 2019 Posted June 10, 2019 да, уже смотрю, там глубоковато зарыт драйвер... Вставить ник Quote
roma33rus Posted June 10, 2019 Author Posted June 10, 2019 Вот нашел в main.pm строчку подключения к БД $db = DBI->connect_cached( "DBI:mysql:database=$dbname;host=$dbhost;mysql_client_found_rows=0", "$dbuser" , "$dbpasswd", { Taint => 1, private_scope_key => $attr->{SCOPE} || 0 } ) никаких таймаутов. Вставить ник Quote
NewUse Posted June 10, 2019 Posted June 10, 2019 (edited) Вот, а надо добавить: у меня, правда с oracle, бывало, что соединение зависало, там надо было через keep-alive настраивать ибо драйвер не умеет таймаут. $db = DBI->connect_cached( "DBI:mysql:database=$dbname;host=$dbhost;mysql_client_found_rows=0;mysql_connect_timeout=600", "$dbuser" , "$dbpasswd", { Taint => 1, private_scope_key => $attr->{SCOPE} || 0 } ) Единственное, я бы наверное в rlm_perl.pl правил, чтоб на остальные скрипты не повлиять: use DBI; my $db = DBI->connect("DBI:mysql:database=$dbname;host=$dbhost;mysql_client_found_rows=0;mysql_connect_timeout=6", "$dbuser" , "$dbpasswd"); Попробуйте так. Edited June 10, 2019 by NewUse уменьшил таймаут до 6с. Вставить ник Quote
roma33rus Posted June 10, 2019 Author Posted June 10, 2019 Спасибо, попробую поменять. У Вас тоже Abills? Вставить ник Quote
NewUse Posted June 10, 2019 Posted June 10, 2019 (edited) нет, у меня не abils Да, надо посмотреть запросы, добавить логирование времени отправки и коммита, возможно дубли, или что-то ещё, и уменьшить таймаут до 3-5секунд, от 600 толкуне будет, в самом радиусе встроен таймаут в ~30 секунд Edited June 10, 2019 by NewUse Вставить ник Quote
roma33rus Posted June 11, 2019 Author Posted June 11, 2019 Хорошо. я пока попробую с таймаутом поиграюсь. Посмотрим как он себя вести будет. Вставить ник Quote
roma33rus Posted June 18, 2019 Author Posted June 18, 2019 (edited) Всем привет еще раз. Поставил я таймаут в rlm_perl. Сутки пока полет нормальный, ошибок не было. а вот память как он жрал, так и жрет. Куда ему вообще столько памяти то? я уж все лишние модули поотключал. Стоит паниковать при таком расходе? Edited June 18, 2019 by roma33rus Вставить ник Quote
~AsmodeuS~ Posted June 18, 2019 Posted June 18, 2019 Поставте мониторинг радиуса чтобы понять в чем затык http://abills.net.ua:8090/pages/viewpage.action?pageId=11403799 Вставить ник Quote
roma33rus Posted June 18, 2019 Author Posted June 18, 2019 10 минут назад, ~AsmodeuS~ сказал: Поставте мониторинг радиуса чтобы понять в чем затык http://abills.net.ua:8090/pages/viewpage.action?pageId=11403799 да, можно попробовать, спасибо. Вставить ник Quote
NewUse Posted June 18, 2019 Posted June 18, 2019 скорее всего жрёт перл, и проблема в БД, таймаут это всего лишь костыль, чтоб разобраться в проблеме нужно разобраться, почему тормозит БД. Вставить ник Quote
roma33rus Posted June 18, 2019 Author Posted June 18, 2019 Да если бы проблема была в производительности базы, то ошибки были бы всегда при высокой нагрузки. А так по факту у меня при нагрузке может и хорошо все работать. Я все-таки наверно попробую perl пересобрать с -Dusethreads. Или оно вообще никак не повлияет? Просто где-то прочитал, что если perl собран без этой опции, то из конфига модуля perl не учитываются переменные: max_clones = 128 start_clones = 32 min_spare_clones = 5 max_spare_clones = 32 max_request_per_clone = 64 Вставить ник Quote
NewUse Posted June 18, 2019 Posted June 18, 2019 19 минут назад, roma33rus сказал: Да если бы проблема была в производительности базы, то ошибки были бы всегда при высокой нагрузки. Ошибки могут быть из-за dead-lock от конкретных запросов, а не от нагрузки. 20 минут назад, roma33rus сказал: Я все-таки наверно попробую perl пересобрать с -Dusethreads. Хуже точно не будет 21 минуту назад, roma33rus сказал: Или оно вообще никак не повлияет? Скорее всего не повлияет, ну может память чуть медленнее станет течь. Вставить ник Quote
roma33rus Posted June 18, 2019 Author Posted June 18, 2019 2 часа назад, NewUse сказал: Ошибки могут быть из-за dead-lock от конкретных запросов, а не от нагрузки. Хм. Для меня это вновинку, надо почитать инфо про это. Спасибо за наводку. Вставить ник Quote
roma33rus Posted June 20, 2019 Author Posted June 20, 2019 (edited) Пересобрался я значит perl с -Dusethreads. теперь радиус падает с ошибкой radiusd[43025]: segfault at 7ff9ac917140 ip 00007ff9ac917140 sp 00007ff9af933638 error 14 in libfreeradius-dhcp.so[7ff9acd25000+7000] Что-то вообще не клеится у меня. Появляется мысль уже попробовать запуститься на 2 версии радиуса. Edited June 20, 2019 by roma33rus Вставить ник Quote
NewUse Posted June 20, 2019 Posted June 20, 2019 1 час назад, roma33rus сказал: Пересобрался я значит perl с -Dusethreads. теперь радиус падает с ошибкой попробуйте теперь пересобрать радиус с новым perl 1 час назад, roma33rus сказал: Появляется мысль уже попробовать запуститься на 2 версии радиуса. а в чём смысл? 1 час назад, roma33rus сказал: Пересобрался я значит perl с -Dusethreads а где Вы вычитали, что треды поддерживаются в rlm_perl ну и проверяйте конфиг, если поддерживаются. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.