Биллинговая система Nodeny
22 Ноября 2024, 17:22:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: noserver потребляет много памяти  (Прочитано 5420 раз)
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« : 20 Марта 2021, 14:26:32 »

Мне тут сообщили о проблемке, что noserver может потреблять много памяти. Я вспомнил, что когда-то причину этого я вычислил. Но не вспомнил сообщил ли об этом в форуме. Может сообщил и может это сообщение дубликат... В общем, ничего срашного, если будет повторение.

noserver по умолчанию хранит в оперативной памяти данные по трафику каждого юзера за каждый срез в течении последних 12 часов - вот причина. Это очень много данных. Например, если сразы трафика идут каждую минуту, то за 12 часов это 720 значений трафика только на одного абона. А если их 1000, то уже 720 тысяч и т.д. Все это усугубляется тем, что трафик хранится даже для тех абонентов, которые не обслуживаются noserver. Это косяк, понятно. А вот нафига ноусервер хранит трафик со срезами?

Все из-за такой фишки как "скрипты" в услугах. Там есть возможность в зависимости от трафика за определенный период времени регулировать скорость абоненту. Ну, например, если за последний час средняя скорость у абонента 50 мегабит, то скороее всего (не флудим, так было раньше) это большая нагрузка на сеть и есть смысл подрезать на время ему скорость. В таких приемах есть смысл если брать большие интервалы времени. Но эти интервалы времени не фиксируются и могут в скриптах выбираться любые. Короче, из-за этого алгоритма приходится хранитьт трафик со срезами. Это большие данные.

Если вы не юзаете скрипты или не юзаете фишку, связанную с трафком, или же используете максимальный период времени гораздо меньше 12 часов, то эту фичу стоит либо отключить либо уменьшить интервал времени.

В next я сделаю это настраиваемым, а сейчас есть смысл в noserver.pl либо отключить (комментируем):
Код:
# Сбор общего трафика каждого клиента
# nod::tasks->new(
#    task         => sub{ $M->load_usr_traf },
#    period       => 20,
#    first_period => 3,
# );
либо меняем:
Код:
# Храним статистику за последние 12 часов
my $time_remove = int($M->Time) - 12*60*60;
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #1 : 20 Марта 2021, 15:23:56 »

Можливо це проявляється тільки на Debian, на FreeBSD може не проявлятися. І при запуску модулья CoA
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #2 : 20 Марта 2021, 20:00:30 »

Полезная инфа. В копилку.
Записан
mitya0208
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 15


Просмотр профиля
« Ответ #3 : 24 Октября 2021, 08:41:34 »

С ростом общего количества абонентов заметил что noserver начал скачкообразно грузить CPU. Такая картина наблюдается на всех сателлитах:

Код:
 1775 v0- S       25:50,20 /usr/bin/perl /usr/local/nodeny/nokernel.pl -m=dhcp -d
20523  0  S        4:00,16 /usr/bin/perl /usr/local/nodeny/noserver.pl -d

Код:
last pid: 21811;  load averages:  0,97,  0,70,  0,63                                                                                             
252 threads:   14 running, 209 sleeping, 29 waiting
CPU 0:   4,8% user,  0,0% nice,  4,2% system,  0,0% interrupt, 91,0% idle
CPU 1:   3,0% user,  0,0% nice,  6,6% system,  0,0% interrupt, 90,4% idle
CPU 2:   6,0% user,  0,0% nice,  0,0% system,  0,0% interrupt, 94,0% idle
CPU 3:   1,8% user,  0,0% nice,  4,8% system,  0,0% interrupt, 93,4% idle
CPU 4:   3,0% user,  0,0% nice,  3,0% system,  0,0% interrupt, 94,0% idle
CPU 5:   2,4% user,  0,0% nice,  3,6% system,  0,0% interrupt, 94,0% idle
CPU 6:   1,8% user,  0,0% nice,  4,8% system,  0,0% interrupt, 93,4% idle
CPU 7:   2,4% user,  0,0% nice,  9,6% system,  0,0% interrupt, 88,0% idle
CPU 8:   3,0% user,  0,0% nice,  4,2% system,  0,0% interrupt, 92,8% idle
CPU 9:   5,4% user,  0,0% nice,  0,6% system,  0,0% interrupt, 94,0% idle
CPU 10:  3,6% user,  0,0% nice,  0,6% system,  0,0% interrupt, 95,8% idle
CPU 11:  0,6% user,  0,0% nice,  2,4% system,  0,0% interrupt, 97,0% idle
Mem: 106M Active, 4351M Inact, 2507M Wired, 1287M Buf, 8968M Free
Swap: 4096M Total, 4096M Free

  PID USERNAME    PRI NICE   SIZE    RES STATE    C   TIME    WCPU COMMAND
20523 root         29    0    65M    50M select   2   1:39  37,01% perl
    0 root        -76    -     0B  1232K -        1  24:48   7,58% kernel{if_io_tqg_1}
 1750 root         20  -15    97M    68M sbwait   2  47:50   7,57% ipcad{ipcad}
    0 root        -76    -     0B  1232K -        3  31:25   7,12% kernel{if_io_tqg_3}
    0 root        -76    -     0B  1232K -        7  21:48   6,61% kernel{if_io_tqg_7}
    0 root        -76    -     0B  1232K CPU8     8  18:28   4,10% kernel{if_io_tqg_8}
    0 root        -76    -     0B  1232K -        4  23:51   3,64% kernel{if_io_tqg_4}
 1750 root         20  -15    97M    68M sbwait   4  19:40   2,77% ipcad{ipcad}
    0 root        -76    -     0B  1232K -        6  21:09   2,17% kernel{if_io_tqg_6}
    0 root        -76    -     0B  1232K -        0  26:24   2,04% kernel{if_io_tqg_0}
    0 root        -76    -     0B  1232K -       11  15:04   2,02% kernel{if_io_tqg_11}
    0 root        -76    -     0B  1232K -        5  24:15   1,77% kernel{if_io_tqg_5}
    0 root        -76    -     0B  1232K -       10  16:59   1,09% kernel{if_io_tqg_10}
    0 root        -92    -     0B  1232K -        0   6:28   0,96% kernel{dummynet}
    0 root        -76    -     0B  1232K -        2  22:05   0,88% kernel{if_io_tqg_2}
    0 root        -76    -     0B  1232K -        9  16:42   0,72% kernel{if_io_tqg_9}

Думаю это как-то связанно:

Код:
ipfw pipe show > pipe.log
cat -n pipe.log

12425  02296:  52.000 Mbit/s    0 ms burst 0
 12426  q133368  50 sl. 0 flows (1 buckets) sched 67832 weight 0 lmax 0 pri 0 droptail
 12427   sched 67832 type FIFO flags 0x0 0 buckets 0 active

По факту, на данный момент, через этот сателлит бежит порядка 150 абонентов и ±200 Мбит трафика (сколько особо значения не имеет). В перспективе это накладывает ограничения на горизонтальный рост. Возможно его научить работать только с теми сетями которые есть на конкретном сателлите? Или мой вывод по этому поводу не верный?

PS: Можно конечно забить и не париться Улыбающийся Особо не напрягает.
« Последнее редактирование: 24 Октября 2021, 09:39:51 от mitya0208 » Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #4 : 24 Октября 2021, 17:57:59 »

В cfg/noserver.cfg.pm есть параметр

Код:
$ip_tags    = '';               # обрабатывать ip только с этим тегом

может он поможет
Записан
mitya0208
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 15


Просмотр профиля
« Ответ #5 : 26 Октября 2021, 06:09:14 »

Присваиваю тег nas01 подсети 172.16.180.0/22:

Код:
172.16.180.11	Динамический			nas01	Изменить	Удалить
172.16.180.12 Динамический 5926 nas01 Изменить Удалить
172.16.180.13 Динамический 5414 nas01 Изменить Удалить
172.16.180.14 Динамический nas01 Изменить Удалить
172.16.180.15 Динамический 5380 nas01 Изменить Удалить
172.16.180.16 Динамический 5381 nas01 Изменить Удалить

Код:
cat /usr/local/nodeny/cfg/noserver.cfg.pm
$ip_tags    = 'nas01';               # обрабатывать ip только с этим тегом

Код:
ps -ax | grep no
1775 v0- S      101:28,63 /usr/bin/perl /usr/local/nodeny/nokernel.pl -m=dhcp -d
75817  1  S        1:28,63 /usr/bin/perl /usr/local/nodeny/noserver.pl -d

kill -9 75817

/etc/rc.d/ipfw restart

/usr/bin/perl /usr/local/nodeny/noserver.pl -d &

ps -ax | grep no
1775 v0- S      101:31,09 /usr/bin/perl /usr/local/nodeny/nokernel.pl -m=dhcp -d
79082  1  S        0:00,86 /usr/bin/perl /usr/local/nodeny/noserver.pl -d

Код:
ipfw table 41 list | wc -l
3388

Код:
ipfw table 41 list | grep -e 16.180 -e 16.181 -e 16.182 -e 16.183 | wc -l
39

Код:
svn info
Path: .
Working Copy Root Path: /usr/local/nodeny
URL: svn://nodeny-plus.com.ua/release
Relative URL: ^/
Repository Root: svn://nodeny-plus.com.ua/release
Repository UUID: 2dcad6c2-3daf-43f6-9252-ff095f4c085f
Revision: 640
Node Kind: directory
Schedule: normal
Last Changed Author: sv
Last Changed Rev: 640
Last Changed Date: 2021-10-12 22:02:30 +0300 (вт, 12 окт. 2021)

Код:
uname -a
FreeBSD nas01 13.0-RELEASE-p4 FreeBSD 13.0-RELEASE-p4 #0: Tue Aug 24 07:33:27 UTC 2021     root@amd64-builder.daemonology.net:/usr/obj/usr/src/amd64.amd64/sys/GENERIC  amd64

Код:
pkg info | grep perl
perl5-5.32.1_1                 Practical Extraction and Report Language

Что я делаю не так?
Записан
cojiict
Старожил
****

Карма: 0
Offline Offline

Сообщений: 341


Просмотр профиля Email
« Ответ #6 : 28 Октября 2021, 08:10:50 »

Можливо потрібен рестарт ядра і модулів?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #7 : 28 Октября 2021, 15:47:32 »

Не. Ядро не надо рестартовать, только noserver, но по его логам видно что он рестартовал.
Вообще, я в последний раз влазил в noserver и ipfw черт знает когда и уже нифига не помню. Для начала надо запустить noserver с  ключем -v, тогда он покажет что он делает. В первую очередь надо выудить sql,  в котором будет (и будет ли) nas01. Посмореть что там выбралось, сколько строк.
Код:
ipfw table 41 list | grep -e 16.180 -e 16.181 -e 16.182 -e 16.183 | wc -l
это твои сети? 39 клиентов не много. А другие 3к записей - это что за сети?
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!