Перейти к содержимому
Local
XoRe

Сбор багов и feature requests

Рекомендованные сообщения

Еще один баг (выявился случайно)

сервер останавливается в 23.50 в 00 часов должна была пройти смена тарифов или снятся абонплата

после запуска (около 2 часов) ни абон плата ни смена тарифа не происходит

Понятно что это не смертельно но это есть

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Столкнулся с багом - в 00:00 первого числа когда клиентам обнуляется траф...

Короче на сколько я понимаю это совсекм не глюк.

 

Работает это так:

 

Первого числа в 00:00 снимается абонка за прошлый месяц. К примеру если ты подключил человека 15 числа и абонка составляет 10 грн. То у него будет снято 5 грн. (проверял, так и есть).

Ну и соответственно, если ты сменил тариф, то абенка по новому тарифу будет снята в начале следующего месяца.

 

Я сам не понимаю, почему так работает, в настройках у меня стоит снимать абонку первого числа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сие произошло именно при этих условиях

Я знаком со всем вышеописанным иначе бы не писал

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вобщем с тем что абонка снялась при переходе на другой тариф старая я протупил :loop: в конфиге не поменял, а во про снятие левых сумм - че-то я так и непонял.

to Yaroslav по поводу снятия абонки в зависимости от времени подключения это правда? в старых версия старика я такого не наблюдал, и если да то как пофиксить чтобы биллинг не пересчитывал время когда юзера подключили и стоимость абонки на текущий месяц, потому что получается бред например пакет стоит 50грн юзера включили 15 числа т.е. в следующем месяце с него снимет 25 грн абонки но начислит 50грн предоплаченного трафа - это мне кажется неправильно. Кто что посоветует

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хотелось бы в тарифах сделать выключение обсчета трафика, например, для безлимитчиков. Зачем их считать, тратить ресурсы и базу ненужной детальной статистикой забивать? Анлима становится все больше и больше, думаю, назреет необходимость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Хотелось бы в тарифах сделать выключение обсчета трафика, например, для безлимитчиков. Зачем их считать, тратить ресурсы и базу ненужной детальной статистикой забивать? Анлима становится все больше и больше, думаю, назреет необходимость.

На самом деле основная работа - это классификация перехваченного пакета. Кому он принадлежит. Потом остается только элементарная операция сложения, которая особо никого не нагружает. Так что выключать обсчет трафика бессмысленно.

В следующей версии добавлена опция отключения записи детальной статистики для отдельных юзеров. Это, ИМХО, более нужная и уже давно востребованная фича.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А не предвидется-ли в ближайшее время написание модуля (патчика?) для хранения юзверей в каталогах ldap или на крайний случай AD (samba)? Т.е. статистика пользователей, их траффик в mysql (firebird), а логины-пароли в лдапе?

 

Имхо фича тоже довольно востребована, особенно в организациях. Создавать юзерам по 2-3 учетки лениво (юзерам хотябы один пароль запомнить), хочется все в лдап запихнуть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
А не предвидется-ли в ближайшее время написание модуля (патчика?) для хранения юзверей в каталогах ldap или на крайний случай AD (samba)? Т.е. статистика пользователей, их траффик в mysql (firebird), а логины-пароли в лдапе?

 

Имхо фича тоже довольно востребована, особенно в организациях. Создавать юзерам по 2-3 учетки лениво (юзерам хотябы один пароль запомнить), хочется все в лдап запихнуть.

Такого рода запросов еще небыло. Ничего пока не могу сказать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
А не предвидется-ли в ближайшее время написание модуля (патчика?) для хранения юзверей в каталогах ldap или на крайний случай AD (samba)? Т.е. статистика пользователей, их траффик в mysql (firebird), а логины-пароли в лдапе?

 

Имхо фича тоже довольно востребована, особенно в организациях. Создавать юзерам по 2-3 учетки лениво (юзерам хотябы один пароль запомнить), хочется все в лдап запихнуть.

думаю что данная фитча востребована организациями, но не провайдерами...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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)"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Запустил с модулем cap_nf в кору не падает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

То что привели вывод gdb stargazer stargazer.core - это хорошо. Но было бы еще неплохо увидеть вывод команды bt (gdb) :wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

(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 строка

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот! Вот этот дядя с большими ушами!

Не туда смотрите. Ошибка тут:

#1  0x283f30ba in ~FLOW_CAP (this=0x284152e0) at netflow_cap.h:146

Но, подозреваю, - там пусто.

А это значит - неправильно срабатывает *_CREATOR. Я уже сталкивался с этим и мы с Борей обсуждали это. В будущем схема работы с плагинами несколько изменится. Воркераунда пока нет, но и данные это падение не портит, т.к. происходит в самом конце, когда жизненно-важные операции уже завершены.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Корка под 120Мбайт. Мне кажется, что там, что то есть. :wacko:

 

Разбирались куда теряются пакеты между сенсором и коллектором,

нашли (спасибо 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

машинка 2 Dual Xenon 3.2

Загрузка CPU во время WriteStat 100%, грузит только 1 процессор. Может возможно оптимизировать код под многопроцессорные машины? Насколько это сложно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Я имел в виду что в 146 строке файла netflow_cap.h ничего нет

2. На время FlushAndRemove лочатся все операции с деревом пакетов. Соответственно - и вызовы от cap-модулей. А что за буфер?

3. Перестает? Интересно...

4. Стата есть у всех.

5. Это сложно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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 - авторизован но нет ни одного байта :rolleyes:

 

5)Хотя бы распредилить потоки между процессорами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Я же говорил :rolleyes:

2. Буфер не обезопасен мьютексом. Что произойдет, если при флаше в буфер добавятся данные?

 

4. У неавторизованных пользователей может накапливаться статистика.

5. Потоки распределяются между процессорами ядром.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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) В чем тогда сложность организации ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Как я уже говорил - это проблемы загрузчика плагинов. Будут исправлены в след версии. Бага не влияет на результаты работы.

2. Нету смысла в буфере, т.к. внутри stg и так есть буфер.

3. Предполагаю - из-зи блокировок. FlushAndRemove останавливается на захвате мьютекса.

4. Может. Может быть мы так и сделаем. Если реализуешь, протестируешь и покажешь что это действительно дает выиграш в производительности - будем благодарны :rolleyes:

5. А кто говорил про сложность организации? Почему многие считают, что для многопроцессорных систем надо выполнять какие-то телодвижения? Stargazer и так работает в несколько потоков. Нужно сделать профилирование, найти узкие места и придумать как их обойти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Модуль 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)

 

Помогите решить где грабли

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Уже кто-то об этом говорил. Грабли неизвестно где, т.к. падает на использовании API FreeRADIUS.

К стати, в прошлый раз тоже было на 6-й фре, если не ошибаюсь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2 madf

 

 

Закоментировал вызов WriteStat

Проблема оказалась не в тормазнутости функции. stg ее вызывает редко.

 

if (stgTime - lastWriteStat > settings->GetStatWritePeriod())
{
printfd(__FILE__, "USER::WriteStat user=%s\n", GetLogin().c_str());
//	WriteStat();
//	WriteConf();
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вобщем проблема с медленной записью статы решилась,

сделал так в 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 машины с которой велся импорт' :rolleyes: юзеры добавляются,

все работает но ip не тот, как и логин впрочем.

parser.cpp > 08:51:46 > PARSE_GET_USER::ParseStart login=ww.w3.org/XML/1998/namespace

что то не то с lexpat ?

 

2madf

Нету смысла в буфере, т.к. внутри stg и так есть буфер.

В каком месте он есть ? Патч к модулю netflow помогает избавится от злощастных проблем. Без буфера не учитывается 10-20% трафика.

Только появляется еще одна проблема иногда данные совсем перестают поступать в traffcounter, видемо действительно нужен мьютекс

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×