sky 0 Опубліковано: 2007-06-01 16:16:22 Share Опубліковано: 2007-06-01 16:16:22 Еще один баг (выявился случайно) сервер останавливается в 23.50 в 00 часов должна была пройти смена тарифов или снятся абонплата после запуска (около 2 часов) ни абон плата ни смена тарифа не происходит Понятно что это не смертельно но это есть Ссылка на сообщение Поделиться на других сайтах
Yaroslav 0 Опубліковано: 2007-06-03 17:41:42 Share Опубліковано: 2007-06-03 17:41:42 Столкнулся с багом - в 00:00 первого числа когда клиентам обнуляется траф... Короче на сколько я понимаю это совсекм не глюк. Работает это так: Первого числа в 00:00 снимается абонка за прошлый месяц. К примеру если ты подключил человека 15 числа и абонка составляет 10 грн. То у него будет снято 5 грн. (проверял, так и есть). Ну и соответственно, если ты сменил тариф, то абенка по новому тарифу будет снята в начале следующего месяца. Я сам не понимаю, почему так работает, в настройках у меня стоит снимать абонку первого числа. Ссылка на сообщение Поделиться на других сайтах
sky 0 Опубліковано: 2007-06-03 19:54:47 Share Опубліковано: 2007-06-03 19:54:47 Сие произошло именно при этих условиях Я знаком со всем вышеописанным иначе бы не писал Ссылка на сообщение Поделиться на других сайтах
neom 8 Опубліковано: 2007-06-04 06:40:59 Share Опубліковано: 2007-06-04 06:40:59 Вобщем с тем что абонка снялась при переходе на другой тариф старая я протупил :loop: в конфиге не поменял, а во про снятие левых сумм - че-то я так и непонял. to Yaroslav по поводу снятия абонки в зависимости от времени подключения это правда? в старых версия старика я такого не наблюдал, и если да то как пофиксить чтобы биллинг не пересчитывал время когда юзера подключили и стоимость абонки на текущий месяц, потому что получается бред например пакет стоит 50грн юзера включили 15 числа т.е. в следующем месяце с него снимет 25 грн абонки но начислит 50грн предоплаченного трафа - это мне кажется неправильно. Кто что посоветует Ссылка на сообщение Поделиться на других сайтах
Smeet 0 Опубліковано: 2008-04-24 15:40:45 Share Опубліковано: 2008-04-24 15:40:45 Хотелось бы в тарифах сделать выключение обсчета трафика, например, для безлимитчиков. Зачем их считать, тратить ресурсы и базу ненужной детальной статистикой забивать? Анлима становится все больше и больше, думаю, назреет необходимость. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-04-24 15:51:09 Share Опубліковано: 2008-04-24 15:51:09 Хотелось бы в тарифах сделать выключение обсчета трафика, например, для безлимитчиков. Зачем их считать, тратить ресурсы и базу ненужной детальной статистикой забивать? Анлима становится все больше и больше, думаю, назреет необходимость. На самом деле основная работа - это классификация перехваченного пакета. Кому он принадлежит. Потом остается только элементарная операция сложения, которая особо никого не нагружает. Так что выключать обсчет трафика бессмысленно. В следующей версии добавлена опция отключения записи детальной статистики для отдельных юзеров. Это, ИМХО, более нужная и уже давно востребованная фича. Ссылка на сообщение Поделиться на других сайтах
fernir 0 Опубліковано: 2008-04-25 11:34:15 Share Опубліковано: 2008-04-25 11:34:15 А не предвидется-ли в ближайшее время написание модуля (патчика?) для хранения юзверей в каталогах ldap или на крайний случай AD (samba)? Т.е. статистика пользователей, их траффик в mysql (firebird), а логины-пароли в лдапе? Имхо фича тоже довольно востребована, особенно в организациях. Создавать юзерам по 2-3 учетки лениво (юзерам хотябы один пароль запомнить), хочется все в лдап запихнуть. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-04-25 11:37:34 Share Опубліковано: 2008-04-25 11:37:34 А не предвидется-ли в ближайшее время написание модуля (патчика?) для хранения юзверей в каталогах ldap или на крайний случай AD (samba)? Т.е. статистика пользователей, их траффик в mysql (firebird), а логины-пароли в лдапе? Имхо фича тоже довольно востребована, особенно в организациях. Создавать юзерам по 2-3 учетки лениво (юзерам хотябы один пароль запомнить), хочется все в лдап запихнуть. Такого рода запросов еще небыло. Ничего пока не могу сказать. Ссылка на сообщение Поделиться на других сайтах
Max 0 Опубліковано: 2008-04-26 05:23:04 Share Опубліковано: 2008-04-26 05:23:04 А не предвидется-ли в ближайшее время написание модуля (патчика?) для хранения юзверей в каталогах ldap или на крайний случай AD (samba)? Т.е. статистика пользователей, их траффик в mysql (firebird), а логины-пароли в лдапе? Имхо фича тоже довольно востребована, особенно в организациях. Создавать юзерам по 2-3 учетки лениво (юзерам хотябы один пароль запомнить), хочется все в лдап запихнуть. думаю что данная фитча востребована организациями, но не провайдерами... Ссылка на сообщение Поделиться на других сайтах
Silitra 0 Опубліковано: 2008-08-17 03:33:33 Share Опубліковано: 2008-08-17 03:33:33 billing# uname -rs FreeBSD 7.0-RELEASE stg-2.405.9.8 с родным модулем mysql При завершении падает в кору (только когда собран с debug'ом) user.cpp > 03:41:36 > Disconnect. User name 'aaa' ip=192.168.x.x user.cpp > 03:41:36 > Disconnect. User name 'bbb' ip=195.184.x.x traffcounter.cpp > 03:41:36 > FlushAndRemove() packets: 20035(rem 1163) ip2packets: 40070(rem 2326) traffcounter.cpp > 03:41:39 > TRAFFCOUNTER::Stop() users.cpp > 03:41:39 > USERS::Stop() users.cpp > 03:41:39 > RealDelUser() users to del: 0 users.cpp > 03:41:39 > Brfore USERS::Run() users.cpp > 03:42:01 > USERS::Stop() main.cpp > 03:42:02 > KillExecuters pid=3868 stgconfig.cpp > 03:42:03 > destructor STGCONFIG_CREATOR ping.cpp > 03:42:03 > destructor PING_CREATOR ao.cpp > 03:42:03 > destructor AO_CREATOR inetaccess.cpp > 03:42:03 > destructor IA_CREATOR Segmentation fault (core dumped) Лог 2008-08-17 03:37:45 -- +++++++++++++++++++++++++++++++++++++++++++++ 2008-08-17 03:41:24 -- Shutting down... 2 2008-08-17 03:41:24 -- +++++++++++++++++++++++++++++++++++++++++++++ 2008-08-17 03:41:24 -- Module: 'Stg configurator v.0.07'. Stop successfull. 2008-08-17 03:41:25 -- Module: 'Pinger v.1.01'. Stop successfull. 2008-08-17 03:41:32 -- Module: 'Always Online authorizator v.1.0'. Stop successfull. 2008-08-17 03:41:34 -- Module: 'InetAccess authorizator v.1.2'. Stop successfull. 2008-08-17 03:41:35 -- Module: 'netflow_cap v.1.3.9-beta2'. Stop successfull. 2008-08-17 03:41:39 -- Traffcounter: Stop successfull. 2008-08-17 03:42:01 -- Users: Stop successfull. 2008-08-17 03:42:02 -- Queue removed successfully. 2008-08-17 03:42:02 -- StgTimer: Stop successfull. 2008-08-17 03:42:02 -- Stg stopped successfully. 2008-08-17 03:42:03 -- --------------------------------------------- billing# gdb stargazer stargazer.core GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd"... Core was generated by `stargazer'. Program terminated with signal 11, Segmentation fault. Reading symbols from /usr/lib/stg/libstg_logger.so...done. Loaded symbols for /usr/lib/stg/libstg_logger.so Reading symbols from /usr/lib/stg/libstg_locker.so...done. Loaded symbols for /usr/lib/stg/libstg_locker.so Reading symbols from /usr/lib/stg/libstg_common.so...done. Loaded symbols for /usr/lib/stg/libstg_common.so Reading symbols from /usr/lib/stg/libscript_executer.so...done. Loaded symbols for /usr/lib/stg/libscript_executer.so Reading symbols from /usr/lib/stg/libdotconfpp.so...done. Loaded symbols for /usr/lib/stg/libdotconfpp.so Reading symbols from /usr/local/lib/libexpat.so.6...done. Loaded symbols for /usr/local/lib/libexpat.so.6 Reading symbols from /lib/libthr.so.3...done. Loaded symbols for /lib/libthr.so.3 Reading symbols from /lib/libc.so.7...done. Loaded symbols for /lib/libc.so.7 Reading symbols from /usr/lib/libstdc++.so.6...done. Loaded symbols for /usr/lib/libstdc++.so.6 Reading symbols from /lib/libm.so.5...done. Loaded symbols for /lib/libm.so.5 Reading symbols from /lib/libgcc_s.so.1...done. Loaded symbols for /lib/libgcc_s.so.1 Reading symbols from /usr/lib/stg/libstg_crypto.so...done. Loaded symbols for /usr/lib/stg/libstg_crypto.so Reading symbols from /usr/lib/stg/mod_store_mysql.so...done. Loaded symbols for /usr/lib/stg/mod_store_mysql.so Reading symbols from /usr/local/lib/mysql/libmysqlclient_r.so.16...done. Loaded symbols for /usr/local/lib/mysql/libmysqlclient_r.so.16 Reading symbols from /lib/libcrypt.so.4...done. Loaded symbols for /lib/libcrypt.so.4 Reading symbols from /lib/libz.so.4...done. Loaded symbols for /lib/libz.so.4 Reading symbols from /usr/lib/stg/mod_cap_netflow.so...done. Loaded symbols for /usr/lib/stg/mod_cap_netflow.so Reading symbols from /libexec/ld-elf.so.1...done. Loaded symbols for /libexec/ld-elf.so.1 #0 0x283dbfa0 in ?? () [New Thread 0x28401100 (LWP 100062)] (gdb) Еще заметил, что иногда остается процесс "stargazer: stg-exec (stargazer)" Ссылка на сообщение Поделиться на других сайтах
Silitra 0 Опубліковано: 2008-08-17 11:28:55 Share Опубліковано: 2008-08-17 11:28:55 Запустил с модулем cap_nf в кору не падает. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-08-18 08:14:24 Share Опубліковано: 2008-08-18 08:14:24 То что привели вывод gdb stargazer stargazer.core - это хорошо. Но было бы еще неплохо увидеть вывод команды bt (gdb) Ссылка на сообщение Поделиться на других сайтах
Silitra 0 Опубліковано: 2008-08-20 09:51:54 Share Опубліковано: 2008-08-20 09:51:54 (gdb) bt #0 0x283dcfa0 in ?? () #1 0x283f30ba in ~FLOW_CAP (this=0x284152e0) at netflow_cap.h:146 #2 0x283f117e in ~FLOW_CAP_CREATOR (this=0x283f7ebc) at netflow_cap.cpp:64 #3 0x283eee50 in __tcf_1 () at netflow_cap.cpp:76 #4 0x282067e7 in __cxa_finalize () from /lib/libc.so.7 #5 0x283ee683 in __do_global_dtors_aux () from /usr/lib/stg/mod_cap_netflow.so #6 0x283f4eac in _fini () from /usr/lib/stg/mod_cap_netflow.so #7 0x280fd560 in ?? () from /libexec/ld-elf.so.1 #8 0x280fd3f4 in ?? () from /libexec/ld-elf.so.1 #9 0xbfbfe9d8 in ?? () #10 0x280db449 in dlsym () from /libexec/ld-elf.so.1 #11 0x280db552 in dlclose () from /libexec/ld-elf.so.1 #12 0x080d0844 in PLUGIN_RUNNER::Unload (this=0x28415248) at plugin_runner.cpp:133 #13 0x080d08ac in ~PLUGIN_RUNNER (this=0x28415248) at plugin_runner.cpp:33 #14 0x08091871 in __gnu_cxx::new_allocator<PLUGIN_RUNNER>::destroy (this=0xbfbfea9b, __p=0x28415248) at new_allocator.h:110 #15 0x080918c9 in std::_List_base<PLUGIN_RUNNER, std::allocator<PLUGIN_RUNNER> >::_M_clear (this=0xbfbfebfc) at list.tcc:78 #16 0x08091932 in ~_List_base (this=0xbfbfebfc) at stl_list.h:348 #17 0x08091981 in ~list (this=0xbfbfebfc) at stl_list.h:408 #18 0x0808f3ef in main (argc=1, argv=0xbfbfecb0) at main.cpp:743 WriteServLog("Stg stopped successfully."); sleep(1); WriteServLog("---------------------------------------------"); return 0;//743 строка Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-08-20 16:08:58 Share Опубліковано: 2008-08-20 16:08:58 Вот! Вот этот дядя с большими ушами! Не туда смотрите. Ошибка тут: #1 0x283f30ba in ~FLOW_CAP (this=0x284152e0) at netflow_cap.h:146 Но, подозреваю, - там пусто. А это значит - неправильно срабатывает *_CREATOR. Я уже сталкивался с этим и мы с Борей обсуждали это. В будущем схема работы с плагинами несколько изменится. Воркераунда пока нет, но и данные это падение не портит, т.к. происходит в самом конце, когда жизненно-важные операции уже завершены. Ссылка на сообщение Поделиться на других сайтах
Silitra 0 Опубліковано: 2008-08-20 17:58:00 Share Опубліковано: 2008-08-20 17:58:00 Корка под 120Мбайт. Мне кажется, что там, что то есть. Разбирались куда теряются пакеты между сенсором и коллектором, нашли (спасибо Platex за реализацию буфера для модуля netflow), проблема была в в локе в FlushAndRemove(), за время выполнения последней в массив packets (к которому как я понимаю имеет доступ другой поток) не поступали данные от модуля Capture (причем не важно cap_nf от madf или netflow). Обнаружилась еще одна проблема, после 10-15 минут работы перестает проявлять себя traffcounter Функция FlushAndRemove перестает вызыватся вовремя или совсем. traffcounter.cpp > 05:28:07 > FlushAndRemove() packets: 3933(rem 0) ip2packets: 7866(rem 0) traffcounter.cpp > 05:28:12 > FlushAndRemove() packets: 8929(rem 0) ip2packets: 17858(rem 0) traffcounter.cpp > 05:28:17 > FlushAndRemove() packets: 13745(rem 0) ip2packets: 27490(rem 0) traffcounter.cpp > 05:28:22 > FlushAndRemove() packets: 18886(rem 0) ip2packets: 37772(rem 0) traffcounter.cpp > 05:28:27 > FlushAndRemove() packets: 23550(rem 0) ip2packets: 47100(rem 0) traffcounter.cpp > 05:28:32 > FlushAndRemove() packets: 27760(rem 0) ip2packets: 55520(rem 0) traffcounter.cpp > 05:28:43 > FlushAndRemove() packets: 26607(rem 6368) ip2packets: 53214(rem 12736) users.cpp > 05:29:00 > Sec = 1219274940 users.cpp > 05:29:00 > New Minute. old = 28 current = 29 users.cpp > 05:29:00 > RealDelUser() users to del: 0 traffcounter.cpp > 05:29:07 > FlushAndRemove() packets: 20532(rem 18304) ip2packets: 41064(rem 36608) traffcounter.cpp > 05:29:41 > FlushAndRemove() packets: 21087(rem 22535) ip2packets: 42174(rem 45070) users.cpp > 05:30:00 > Sec = 1219275000 users.cpp > 05:30:00 > New Minute. old = 29 current = 30 users.cpp > 05:30:07 > RealDelUser() users to del: 0 traffcounter.cpp > 05:30:39 > FlushAndRemove() packets: 11791(rem 42046) ip2packets: 23582(rem 84092) users.cpp > 05:31:00 > Sec = 1219275060 users.cpp > 05:31:00 > New Minute. old = 30 current = 31 users.cpp > 05:31:00 > RealDelUser() users to del: 0 users.cpp > 05:32:00 > Sec = 1219275120 users.cpp > 05:32:00 > New Minute. old = 31 current = 32 users.cpp > 05:32:00 > RealDelUser() users to del: 0 traffcounter.cpp > 05:32:18 > FlushAndRemove() packets: 10485(rem 56353) ip2packets: 20970(rem 112706) users.cpp > 05:33:00 > Sec = 1219275180 users.cpp > 05:33:00 > New Minute. old = 32 current = 33 users.cpp > 05:33:00 > RealDelUser() users to del: 0 users.cpp > 05:34:00 > Sec = 1219275240 users.cpp > 05:34:00 > New Minute. old = 33 current = 34 users.cpp > 05:34:00 > RealDelUser() users to del: 0 И еще, как только подходит время писать стату, поехали: user.cpp > 05:35:04 > USER::WriteStat user=xxxxx user.cpp > 05:35:05 > USER::WriteStat user=dffsfsf user.cpp > 05:35:05 > USER::WriteStat user=reidfs user.cpp > 05:35:05 > USER::WriteStat user=vasfsf user.cpp > 05:35:06 > USER::WriteStat user=adgffdg user.cpp > 05:35:06 > USER::WriteStat user=iregfdg user.cpp > 05:35:07 > USER::WriteStat user=eddsd user.cpp > 05:35:07 > USER::WriteStat user=dfdsf user.cpp > 05:35:08 > USER::WriteStat user=duzfdsa user.cpp > 05:35:08 > USER::WriteStat user=imdsfs user.cpp > 05:35:09 > USER::WriteStat user=valfdgery user.cpp > 05:35:09 > USER::WriteStat user=ivsfsdfa user.cpp > 05:35:10 > USER::WriteStat user=nefdsa user.cpp > 05:35:10 > USER::WriteStat user=sefsdmk user.cpp > 05:35:10 > USER::WriteStat user=sa5827 user.cpp > 05:35:11 > USER::WriteStat user=nfchaev user.cpp > 05:35:11 > USER::WriteStat user=stond user.cpp > 05:35:12 > USER::WriteStat user=vefdg user.cpp > 05:35:12 > USER::WriteStat user=tixfdsf user.cpp > 05:35:13 > USER::WriteStat user=sodfdsfs user.cpp > 05:35:13 > USER::WriteStat user=plimbom user.cpp > 05:35:14 > USER::WriteStat user=bfsdgfdsg user.cpp > 05:35:14 > USER::WriteStat user=wgffdg user.cpp > 05:35:15 > USER::WriteStat user=deefhgdsfn И так бесконечно, не останавливаясь. больше traffcounter не наблюдается. Кажется что stg пишет стату даже для тех у кого ее нет всего 3.5K юзеров. Онлайн 1К Загрузка CPU billing# systat /0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /10 Load Average |||| /0% /10 /20 /30 /40 /50 /60 /70 /80 /90 /100 root idle: cpu3 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX root idle: cpu0 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX root stargazer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX root idle: cpu2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX root idle: cpu1 XXXXXXXXXXXXXXXXXXXXXXXXXXXX root stargazer XX Ссылка на сообщение Поделиться на других сайтах
Silitra 0 Опубліковано: 2008-08-20 18:11:17 Share Опубліковано: 2008-08-20 18:11:17 машинка 2 Dual Xenon 3.2 Загрузка CPU во время WriteStat 100%, грузит только 1 процессор. Может возможно оптимизировать код под многопроцессорные машины? Насколько это сложно? Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-08-21 06:41:32 Share Опубліковано: 2008-08-21 06:41:32 1. Я имел в виду что в 146 строке файла netflow_cap.h ничего нет 2. На время FlushAndRemove лочатся все операции с деревом пакетов. Соответственно - и вызовы от cap-модулей. А что за буфер? 3. Перестает? Интересно... 4. Стата есть у всех. 5. Это сложно. Ссылка на сообщение Поделиться на других сайтах
Silitra 0 Опубліковано: 2008-08-21 07:41:46 Share Опубліковано: 2008-08-21 07:41:46 1) public: FLOW_CAP(); virtual ~FLOW_CAP(){};//146 строка void SetUsers(USERS * u){}; 2) Вотд патчик. diff -Naur 1/netflow_cap.cpp 2/netflow_cap.cpp --- 1/netflow_cap.cpp 2007-04-24 23:53:09.000000000 +0600 +++ 2/netflow_cap.cpp 2008-08-20 21:41:15.000000000 +0600 @@ -424,7 +424,15 @@ errorStr = string("Cannot open socket!:")+errorStr; return -1; } - } + } + + nonstopBuffer = true; + /*Run flush thread*/ + if (pthread_create(&threadBuffer, NULL,RunBufferFlush , this) != 0){ + errorStr = string("Cannot run buffer thread!:")+errorStr; + return -1; + } + // errorStr = "No protocol selected"; return 0; } @@ -541,7 +549,9 @@ #endif if (dc->GenIpHead((void *)rp.pckt,sizeof(rp.pckt),&nfpack,i,100)==0){ rp.dataLen=nfpack.GetRecordByte(i); - dc->traffCnt->Process(rp); + //dc->traffCnt->Process(rp); + dc->buffer.push_back(rp); + } #ifdef DEBUG else @@ -609,7 +619,8 @@ #endif if (dc->GenIpHead((void *)rp.pckt,sizeof(rp.pckt),&nfpack,i,100)==0){ rp.dataLen=nfpack.GetRecordByte(i); - dc->traffCnt->Process(rp); + //dc->traffCnt->Process(rp); + dc->buffer.push_back(rp); } #ifdef DEBUG else @@ -741,3 +752,30 @@ } return 0; } +//---------- Buffer thread-------------------------------------------------- +void * FLOW_CAP::RunBufferFlush(void *d){ + + sleep(2); +#ifdef DEBUG + printfd(__FILE__, "=====================| pid: %d |===================== \n", getpid()); +#endif + + FLOW_CAP * dc = (FLOW_CAP *)d; + + dc->isRunningBuffer = true; + + RAW_PACKET rp; + + while (dc->nonstopBuffer){ + if(!dc->buffer.empty()){ + rp = dc->buffer.front(); + dc->buffer.pop_front(); + dc->traffCnt->Process(rp); + } + else + usleep(10); + } + dc->isRunningBuffer = false; + return NULL; +} + diff -Naur 1/netflow_cap.h 2/netflow_cap.h --- 1/netflow_cap.h 2007-04-12 19:16:50.000000000 +0600 +++ 2/netflow_cap.h 2008-08-20 21:35:49.000000000 +0600 @@ -167,6 +167,7 @@ private: static void * RunUdp(void *); static void * RunTcp(void *); + static void * RunBufferFlush(void *); int FlowTcpSocketOpen(); int FlowUdpSocketOpen(); int FlowTcpSocketClose(); @@ -179,15 +180,19 @@ mutable string errorStr; pthread_t threadUdp; pthread_t threadTcp; + pthread_t threadBuffer; bool nonstopUdp; bool nonstopTcp; + bool nonstopBuffer; bool isRunningUdp; bool isRunningTcp; + bool isRunningBuffer; int capSockUdp; int capSockTcp; MODULE_SETTINGS settings; TRAFFCOUNTER * traffCnt; + list<RAW_PACKET> buffer; }; //----------------------------------------------------------------------------- 3)Мне тоже интересно. но факт остается фактом. 4)На протежении последних 25 минут (45 минут от запуска) users.cpp > 19:36:00 > Sec = 1219325760 users.cpp > 19:36:00 > New Minute. old = 35 current = 36 users.cpp > 19:36:00 > RealDelUser() users to del: 0 user.cpp > 19:36:01 > USER::WriteStat user=truworr user.cpp > 19:36:02 > USER::WriteStat user=yvert user.cpp > 19:36:02 > USER::WriteStat user=uyin user.cpp > 19:36:03 > USER::WriteStat user=mangus и так далее. По 2-3 юзера за сек. Больше ни чего нет кроме WriteStat Смотрим юзера yvert - не автаризован. Смотрим юзера mangus - авторизован но нет ни одного байта 5)Хотя бы распредилить потоки между процессорами. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-08-21 08:25:42 Share Опубліковано: 2008-08-21 08:25:42 1. Я же говорил 2. Буфер не обезопасен мьютексом. Что произойдет, если при флаше в буфер добавятся данные? 4. У неавторизованных пользователей может накапливаться статистика. 5. Потоки распределяются между процессорами ядром. Ссылка на сообщение Поделиться на других сайтах
Silitra 0 Опубліковано: 2008-08-21 10:28:15 Share Опубліковано: 2008-08-21 10:28:15 1) Как исправить ? 2) Если прикрутить mutex куда будут писатся данные во время flush? Потеряется смысл буфера. Как првильно сделать буфер? 3) Вывод stg. (Поток netflow не поступает в коллект), так скажим - холостой ход. Видно, что время между вызовами FlushAndRemove приходит в норму, а время исполнения WriteStat и между вызовами, такое же как и под нагрузкой. Почему так медленно ? user.cpp > 22:05:22 > USER::WriteStat user=duke1 traffcounter.cpp > 22:05:23 > FlushAndRemove() packets: 0(rem 0) ip2packets: 0(rem 0) user.cpp > 22:05:24 > USER::WriteStat user=tyutu user.cpp > 22:05:24 > USER::WriteStat user=utyut user.cpp > 22:05:26 > USER::WriteStat user=karytut user.cpp > 22:05:27 > USER::WriteStat user=uytu user.cpp > 22:05:28 > USER::WriteStat user=uyutyu user.cpp > 22:05:28 > USER::WriteStat user=utyuytu traffcounter.cpp > 22:05:28 > FlushAndRemove() packets: 0(rem 0) ip2packets: 0(rem 0) user.cpp > 22:05:29 > USER::WriteStat user=htyu user.cpp > 22:05:31 > USER::WriteStat user=virtet user.cpp > 22:05:33 > USER::WriteStat user=vortyranin traffcounter.cpp > 22:05:33 > FlushAndRemove() packets: 0(rem 0) ip2packets: 0(rem 0) user.cpp > 22:05:34 > USER::WriteStat user=putryut user.cpp > 22:05:34 > USER::WriteStat user=duyrty user.cpp > 22:05:34 > USER::WriteStat user=ddyu user.cpp > 22:05:35 > USER::WriteStat user=suytter user.cpp > 22:05:35 > USER::WriteStat user=ooytu user.cpp > 22:05:36 > USER::WriteStat user=kyturt user.cpp > 22:05:38 > USER::WriteStat user=zmuytum user.cpp > 22:05:38 > USER::WriteStat user=kiruty user.cpp > 22:05:38 > USER::WriteStat user=aliuyt traffcounter.cpp > 22:05:38 > FlushAndRemove() packets: 0(rem 0) ip2packets: 0(rem 0) user.cpp > 22:05:40 > USER::WriteStat user=foryutrd user.cpp > 22:05:40 > USER::WriteStat user=comyt user.cpp > 22:05:41 > USER::WriteStat user=vasytua user.cpp > 22:05:42 > USER::WriteStat user=mvih user.cpp > 22:05:42 > USER::WriteStat user=btswin user.cpp > 22:05:43 > USER::WriteStat user=vda user.cpp > 22:05:43 > USER::WriteStat user=miaytu user.cpp > 22:05:43 > USER::WriteStat user=dier traffcounter.cpp > 22:05:43 > FlushAndRemove() packets: 0(rem 0) ip2packets: 0(rem 0) 4) Может, но зачем писать для тех у кого нет? Может добавить условие. 5) В чем тогда сложность организации ? Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-08-21 11:50:27 Share Опубліковано: 2008-08-21 11:50:27 1. Как я уже говорил - это проблемы загрузчика плагинов. Будут исправлены в след версии. Бага не влияет на результаты работы. 2. Нету смысла в буфере, т.к. внутри stg и так есть буфер. 3. Предполагаю - из-зи блокировок. FlushAndRemove останавливается на захвате мьютекса. 4. Может. Может быть мы так и сделаем. Если реализуешь, протестируешь и покажешь что это действительно дает выиграш в производительности - будем благодарны 5. А кто говорил про сложность организации? Почему многие считают, что для многопроцессорных систем надо выполнять какие-то телодвижения? Stargazer и так работает в несколько потоков. Нужно сделать профилирование, найти узкие места и придумать как их обойти. Ссылка на сообщение Поделиться на других сайтах
romanv 0 Опубліковано: 2008-08-21 13:16:59 Share Опубліковано: 2008-08-21 13:16:59 Модуль rlm_stg , freeradius 1.1.7 падает в кору FreeBSD 6.3 stg-2.405.9.8 (gdb) #0 0x282fa118 in ?? () from /usr/lib/rlm_stg.so #1 0x08054bd1 in modcall () #2 0x080551a4 in modcall () #3 0x08054e6e in modcall () #4 0x080540bc in find_module_instance () #5 0x0804d0fc in rad_authenticate () #6 0x08056ac1 in rad_respond () #7 0x080581fc in main () radiusd.log modcall[authorize]: module "chap" returns ok for request 0 modcall[authorize]: module "mschap" returns noop for request 0 rlm_stg: stg_authorize() Segmentation fault (core dumped) Помогите решить где грабли Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-08-21 13:57:54 Share Опубліковано: 2008-08-21 13:57:54 Уже кто-то об этом говорил. Грабли неизвестно где, т.к. падает на использовании API FreeRADIUS. К стати, в прошлый раз тоже было на 6-й фре, если не ошибаюсь. Ссылка на сообщение Поделиться на других сайтах
Silitra 0 Опубліковано: 2008-08-21 15:07:57 Share Опубліковано: 2008-08-21 15:07:57 2 madf Закоментировал вызов WriteStat Проблема оказалась не в тормазнутости функции. stg ее вызывает редко. if (stgTime - lastWriteStat > settings->GetStatWritePeriod()) { printfd(__FILE__, "USER::WriteStat user=%s\n", GetLogin().c_str()); // WriteStat(); // WriteConf(); } Ссылка на сообщение Поделиться на других сайтах
Silitra 0 Опубліковано: 2008-08-21 21:10:33 Share Опубліковано: 2008-08-21 21:10:33 Вобщем проблема с медленной записью статы решилась, сделал так в users.cpp //lastWriteStat = stgTime + random() % settings->GetStatWritePeriod(); lastWriteStat = stgTime + settings->GetStatWritePeriod(); Теперь на WriteStat для всех юзеров тратится 25 сек. так же упала нагрузка на CPU со 100% до 20-30%. И стала менее выраженной проблема потерей пакетов между mod_capture и traffcounter'ом (test# netstat -s -p udp | grep full) Вобщем тут еще одна мелкая проблемка. Запустил скрипт импорта юзеров в stg на удаленной машине, скрипт берет юзеров из базы mysql и впихивает их средствами sgconf_xml в рабочий сервер медленно но верно(кстате почему медленно?) configproto.cpp > 08:51:46 > ParseXMLStart configproto.cpp > 08:51:46 > Start parser.cpp > 08:51:46 > PARSER_GET_SERVER_INFO::ParseStart configproto.cpp > 08:51:46 > Start parser.cpp > 08:51:46 > PARSER_GET_USERS::ParseStart configproto.cpp > 08:51:46 > Start parser.cpp > 08:51:46 > PARSE_GET_USER::ParseStart login=ww.w3.org/XML/1998/namespace configproto.cpp > 08:51:46 > Start parser.cpp > 08:51:46 > PARSER_CHG_USER::Reset() parser.cpp > 08:51:46 > PARSER_CHG_USER::Reset() DEL USR ===================== parser.cpp > 08:51:46 > PARSER_CHG_USER::ParseStart el = AddUser depth = 1 parser.cpp > 08:51:46 > PARSER_CHG_USER::Reset() parser.cpp > 08:51:46 > PARSER_CHG_USER::Reset() DEL USR ===================== configproto.cpp > 08:51:46 > Start parser.cpp > 08:51:46 > PARSER_ADD_USER::ParseStart el = AddUser depth = 1 parser.cpp > 08:51:46 > PARSER_ADD_USER::AddUser - OK configproto.cpp > 08:51:46 > ParseXMLStart parser.cpp > 08:51:46 > PARSER_ADD_USER::ParseStart el = login depth = 2 parser.cpp > 08:51:46 > login parser.cpp > 08:51:46 > PARSER_ADD_USER::ParseEnd el = login depth = 2 parser.cpp > 08:51:46 > PARSER_ADD_USER::ParseEnd el = AddUser depth = 1 parser.cpp > 08:51:46 > PARSER_ADD_USER::CheckUserData() natali parser.cpp > 08:51:46 > PARSER_ADD_USER::CheckUserData() OK user.cpp > 08:51:46 > Error GetMessageHdrs Couldn't GetMessageHdrs: user.cpp > 08:51:46 > tariff=0x28418c3c, *_NO_TARIFF_* configproto.cpp > 08:51:46 > currParser == NULL rsconf.cpp > 08:51:46 > End was detected rsconf.cpp > 08:51:46 > ReciveSendConf close rsconf.cpp > 08:51:46 > CONFIGPROTO: Ready to accept user.cpp > 08:51:46 > USER::WriteStat user=fly rsconf.cpp > 08:51:46 > Connection accepted from 192.168.x.x rsconf.cpp > 08:51:46 > RecvHdr - ok buf = SG04 sizeof(STG_HEADER) = 4 проблема в том что 192.168.x.x это мой ип аддрес, во время импорта запустил конфигуратор и нажал обновить. До этого Connection accepted from 'тут был ip машины с которой велся импорт' юзеры добавляются, все работает но ip не тот, как и логин впрочем. parser.cpp > 08:51:46 > PARSE_GET_USER::ParseStart login=ww.w3.org/XML/1998/namespace что то не то с lexpat ? 2madf Нету смысла в буфере, т.к. внутри stg и так есть буфер. В каком месте он есть ? Патч к модулю netflow помогает избавится от злощастных проблем. Без буфера не учитывается 10-20% трафика. Только появляется еще одна проблема иногда данные совсем перестают поступать в traffcounter, видемо действительно нужен мьютекс Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас