Перейти до

Silitra

Сitizens
  • Всього повідомлень

    116
  • Приєднався

  • Останній візит

Все, що було написано Silitra

  1. Silitra

    Опрос. Stg+web+mysql

    http://195.184.78.254/stg-2.405.9.8_.diff
  2. Консольный авторизатор только под 1 логином и с 1 ip, даже если под несколькими, то это не 4000 хаотично подкл./откл юзеров у каждого из которых есть свой вход. и исход. трафик.
  3. #define FLUSH_TIME (10) #define REMOVE_TIME (15) FlushAndRemove() packets: 35053(rem 10738) ip2packets: 61106(rem 18476) если массив ip2packets содержит более 70К (может и боелее, в выводе не видел значения выше 70К) элементов поток зависает. какова причина ? на сколько помню размер массива в Cи не ограничен. как победит траблу?
  4. Silitra

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

    2madf все исковырял, что только уже не делал. такое чувство что происходит сдвиг элементов в масиве. ps. чем больше поток тем больше проявляется.
  5. сколько пакетов в секнду генерил cap_debug? я понимаю нужны для выполнения всех условий нужен inetaccess_debug который будет подключать/отключать указонное кол-во пользователей случайным образом. т.к падение происходит именно при отключении случайного пользователя. и почему то я не уверен что дело в связке user - traffcounter - capturer. распишите поподробней что происходит при падении.
  6. 2madf версия стг какая ?
  7. Silitra

    Опрос. Stg+web+mysql

    2Bolik_Stav какой именно функционал интересует ?
  8. 2Madf Когда примерно будет патч?, время идет. Хотя бы пусть Борис сообщит в чем дело примерно, сами расколупаем проблему.
  9. ок. ждем
  10. 2Madf можно мысли и озвучить)
  11. тогда только скрипт OnChange login=$1 param=$2 oldValue=$3 newValue=$4
  12. ну вот типа патч возможно решающий проблему удаления/добавления правил при переходе на новый месяц --- user.cpp_ 2008-10-20 22:11:46.000000000 +0600 +++ user.cpp 2008-10-20 22:36:30.000000000 +0600 @@ -1328,6 +1328,11 @@ { property.tariffName.Set(nextTariff, sysAdmin, login, store); tariff = nt; + if (connected) + { + Connect(); + Disconnect(); + } } ResetNextTariff(); }
  13. Вот патч. только не в курсах будет или нет работать (вопрос в том есть ли значение у переменной password на момент исполнения скрипта) патчить user.cpp if (access(scriptOnAdd.c_str(), X_OK) == 0) { strprintf(&scriptOnAddParams, - "%s \"%s\"", + "%s \"%s\" \"%s\"", scriptOnAdd.c_str(), - login.c_str()); + login.c_str(), + password); ScriptExec(scriptOnAddParams); }
  14. 20$ и будет отображатся тариф в авторизаторе.
  15. ушли от основной темы, нужно лечить болезнь а не пытатся раз за разом воскрешать покойника. madf что скажешь на счет предоставленной инфы? лично мне кажется что проблема описанная тут http://local.com.ua/forum/index.php?s=&amp...st&p=100297 и болезнь обсуждаемая в этом топике взаимосвязанны. решил сравнить код stg-2.4-2007.01.20-13.47.20 и stg-2.405.9.8 по сравнению с stg-2.4-2007 в ver405 STG_LOCKER lock(&mutex, __FILE__, __LINE__); добавленно в функии USER::Connect USER::Disconnect USER::Run USER::UpdatePingTime USER::IsInetable USER::AddTraffStatU USER::AddTraffStatD USER::GetEnabledDirs USER::ResetDetailStat USER::WriteDetailStat USER::GetPassiveTimePart USER::SetPassiveTimeAsNewUser USER::ProcessDayFeeSpread USER::ProcessDayFee USER::SetPrepaidTraff USER::AddMessage USER::SendMessage USER::ScanMessage USERS::AddToIPIdx USERS::DelFromIPIdx USERS::FindByIPIdx USERS::SetUserNotifiers USERS::UnSetUserNotifiers USERS::AddUserIntoIndexes USERS::DelUserFromIndexes исключено из USERS::Del хотя в USERS::Add осталось и самое главное не блокировки в TRAFFCOUNTER::AddUser TRAFFCOUNTER::DelUser именно на TRAFFCOUNTER::DelUser все тормозится, верней на вызове из нее USER::AddTraffStatU или USER::AddTraffStatD.. думаем дальше
  16. а нельзя их искурить сегодня и вместе ?
  17. таже проблема, анология замечена в месте падения из постов что повыше: что мы имеем: несколько падений в день на тестовом сервере, онлайн 150-300 всего юзеров 3.5К и машинка селерон 1800, 512 ram ось freeBSD 7. модули cap_netflow и file_store. загрузка cpu от 30-90%, запись детал.стат отрублена для всех. и первое падение за месяц на рабочем., машина, 2 dual xenon 3.3 и 4 gb ram, online примерно 1К, всего юеров 3.5К. OS freeBSD 7 модули ether_freebsd и mysql собственного написания. загрузка cpu от 15% до 50%. + mysql сьедает 1 из 4 CPU целиком во время записи детальной статы. видно что причина падения одна., возможно из за не верно раставленных блокировок. (gdb) bt #0 0x2814bfbe in pthread_mutex_lock () from /lib/libthr.so.3 #1 0x0808bbeb in STG_LOCKER (this=0xbf5fa90c, m=0x17e0, __file__=0x80d336d "user.cpp", __line__=911) at stg_locker.h:59 #2 0x080a802a in USER::AddTraffStatU (this=0x8, dir=0, ip=3832810564, dport=59127, sport=47747, len=131) at user.cpp:911 #3 0x0809f282 in TRAFFCOUNTER::DelUser (this=0x2843b060, user={_M_node = 0x28d22000}) at traffcounter.cpp:605 #4 0x08090ae1 in TRF_IP_BEFORE::Notify (this=0x2c769a48, oldValue=@0xbf5faaf8, newValue=@0xbf5fab40) at traffcounter.h:244 #5 0x080b7e02 in USER_PROPERTY<unsigned int>::operator= (this=0x28d22d20, newValue=@0xbf5fab40) at user_property.h:211 #6 0x080a756f in USER::Unauthorize (this=0x28d22008, auth=0x2844e000) at user.cpp:583 #7 0x2867bb8d in AUTH_IA::Send_FIN_6 (this=0x2844e000, iaUser=0x2cacf014, sip=1750247616, it={_M_node = 0x2cacf000}) at inetaccess.cpp:1774 #8 0x2867bc32 in AUTH_IA::Send_FIN_7 (this=0x2844e000, iaUser=0x2cacf014, sip=1750247616, it={_M_node = 0x2cacf000}) at inetaccess.cpp:1783 #9 0x2867ec4c in AUTH_IA::PacketProcessor (this=0x2844e000, buff=0xbf5fadb4 "@", dataLen=64, sip=1750247616, sport=10002, protoVer=7, user=0xbf5fad28) at inetaccess.cpp:1106 #10 0x2867f625 in AUTH_IA::RecvData (this=0x2844e000, buffer=0xbf5fad8c "00100", bufferSize=512) at inetaccess.cpp:690 #11 0x2867fbd5 in AUTH_IA::Run (d=0x2844e000) at inetaccess.cpp:523 #12 0x28147b1f in pthread_getprio () from /lib/libthr.so.3 #13 0x00000000 in ?? () (gdb) f 0 #0 0x2814bfbe in pthread_mutex_lock () from /lib/libthr.so.3 (gdb) l 523 ia->RecvData(buffer, sizeof(buffer)); 524 if ((touchTime + MONITOR_TIME_DELAY_SEC <= stgTime) && ia->stgSettings->GetMonitoring()) 525 { 526 touchTime = stgTime; 527 TouchFile(monFile.c_str()); 528 } 529 } 530 531 ia->isRunningRun = false; 532 return NULL; (gdb) f 1 #1 0x0808bbeb in STG_LOCKER (this=0xbf5fa90c, m=0x17e0, __file__=0x80d336d "user.cpp", __line__=911) at stg_locker.h:59 59 pthread_mutex_lock(mutex); (gdb) l 54 55 lockID = ++id; 56 cout << "Lock: " << lockID << " " << file << ":" << line << " " << mutex << " " << pthread_self() << endl; 57 pthread_mutex_unlock(&lockerMutex); 58 #endif 59 pthread_mutex_lock(mutex); 60 }; 61 62 ~STG_LOCKER() 63 { (gdb) f 2 #2 0x080a802a in USER::AddTraffStatU (this=0x8, dir=0, ip=3832810564, dport=59127, sport=47747, len=131) at user.cpp:911 911 (gdb) l 906 return authorizedBy.size(); 907 } 908 //----------------------------------------------------------------------------- 909 void USER::AddTraffStatU(int dir, uint32_t ip, uint16_t dport, uint16_t sport, uint32_t len) 910 { 911 912 if (!connected) 913 return; 914 915 double dc = 0; (gdb) f 3 #3 0x0809f282 in TRAFFCOUNTER::DelUser (this=0x2843b060, user={_M_node = 0x28d22000}) at traffcounter.cpp:605 605 pi.first->second->second.lenU); (gdb) l 600 { 601 pi.first->second->second.userU->AddTraffStatU(pi.first->second->second.dirU, 602 pi.first->second->first.GetDstIP(), 603 pi.first->second->first.GetDstPort(), 604 pi.first->second->first.GetSrcPort(), 605 pi.first->second->second.lenU); 606 } 607 pi.first->second->second.userUPresent = false; 608 } 609 (gdb) f 4 #4 0x08090ae1 in TRF_IP_BEFORE::Notify (this=0x2c769a48, oldValue=@0xbf5faaf8, newValue=@0xbf5fab40) at traffcounter.h:244 244 traffCnt->DelUser(user); (gdb) l 239 return; 240 241 if (!traffCnt) 242 return; 243 244 traffCnt->DelUser(user); 245 } 246 //----------------------------------------------------------------------------- 247 inline void TRF_IP_AFTER::Notify(const uint32_t & oldValue, const uint32_t & newValue) 248 { (gdb) f 5 #5 0x080b7e02 in USER_PROPERTY<unsigned int>::operator= (this=0x28d22d20, newValue=@0xbf5fab40) at user_property.h:211 211 (*ni++)->Notify(oldVal, newValue); (gdb) l 206 207 varT oldVal = value; 208 209 ni = beforeNotifiers.begin(); 210 while (ni != beforeNotifiers.end()) 211 (*ni++)->Notify(oldVal, newValue); 212 213 value = newValue; 214 modificationTime = stgTime; 215 (gdb) f 6 #6 0x080a756f in USER::Unauthorize (this=0x28d22008, auth=0x2844e000) at user.cpp:583 583 currIP = 0; (gdb) l 578 return; 579 580 if (authorizedBy.empty()) 581 { 582 lastIPForDisconnect = currIP; 583 currIP = 0; 584 return; 585 } 586 } 587 //----------------------------------------------------------------------------- (gdb) f 7 #7 0x2867bb8d in AUTH_IA::Send_FIN_6 (this=0x2844e000, iaUser=0x2cacf014, sip=1750247616, it={_M_node = 0x2cacf000}) at inetaccess.cpp:1774 1774 iaUser->user->Unauthorize(this); (gdb) l 1769 fin6.len = Min8(sizeof(FIN_6)); 1770 strcpy((char*)fin6.type, "FIN"); 1771 strcpy((char*)fin6.ok, "OK"); 1772 Encrypt(&iaUser->ctx, (char*)&fin6, (char*)&fin6, Min8(sizeof(fin6))/8); 1773 1774 iaUser->user->Unauthorize(this); 1775 1776 int ret = Send(sip, iaSettings.GetUserPort(), (char*)&fin6, Min8(sizeof(fin6))); 1777 ip2user.erase(it); 1778 return ret; (gdb) f 8 #8 0x2867bc32 in AUTH_IA::Send_FIN_7 (this=0x2844e000, iaUser=0x2cacf014, sip=1750247616, it={_M_node = 0x2cacf000}) at inetaccess.cpp:1783 1783 return Send_FIN_6(iaUser, sip, it); (gdb) l 1778 return ret; 1779 } 1780 //----------------------------------------------------------------------------- 1781 int AUTH_IA::Send_FIN_7(IA_USER * iaUser, uint32_t sip, map<uint32_t, IA_USER>::iterator it) 1782 { 1783 return Send_FIN_6(iaUser, sip, it); 1784 } 1785 //----------------------------------------------------------------------------- 1786 int AUTH_IA::Send_FIN_8(IA_USER * iaUser, uint32_t sip, map<uint32_t, IA_USER>::iterator it) 1787 { (gdb) f 9 #9 0x2867ec4c in AUTH_IA::PacketProcessor (this=0x2844e000, buff=0xbf5fadb4 "@", dataLen=64, sip=1750247616, sport=10002, protoVer=7, user=0xbf5fad28) at inetaccess.cpp:1106 1106 Send_FIN_7(iaUser, sip, it); (gdb) l 1101 { 1102 case 6: 1103 Send_FIN_6(iaUser, sip, it); 1104 break; 1105 case 7: 1106 Send_FIN_7(iaUser, sip, it); 1107 break; 1108 case 8: 1109 Send_FIN_8(iaUser, sip, it); 1110 break; (gdb) f 10 #10 0x2867f625 in AUTH_IA::RecvData (this=0x2844e000, buffer=0xbf5fad8c "00100", bufferSize=512) at inetaccess.cpp:690 690 PacketProcessor(buffer, dataLen, sip, sport, protoVer, &user); (gdb) l 685 686 user_iter user; 687 if (users->FindByName(login, &user) == 0) 688 { 689 // printfd(__FILE__, "User %s FOUND!\n", user->GetLogin().c_str()); 690 PacketProcessor(buffer, dataLen, sip, sport, protoVer, &user); 691 } 692 else 693 { 694 WriteServLog("User\'s connect failed:: user \'%s\' not found. IP \'%s\'", (gdb) f 11 #11 0x2867fbd5 in AUTH_IA::Run (d=0x2844e000) at inetaccess.cpp:523 523 ia->RecvData(buffer, sizeof(buffer)); (gdb) l 518 //printfd(__FILE__, "Monitor=%d file AUTH_IA %s\n", ia->stgSettings->GetMonitoring(), monFile.c_str()); 519 520 while (ia->nonstop) 521 { 522 // printfd(__FILE__, "Monitor time %d %d\n", touchTime, stgTime + 60); 523 ia->RecvData(buffer, sizeof(buffer)); 524 if ((touchTime + MONITOR_TIME_DELAY_SEC <= stgTime) && ia->stgSettings->GetMonitoring()) 525 { 526 touchTime = stgTime; 527 TouchFile(monFile.c_str()); (gdb) f 12 #12 0x28147b1f in pthread_getprio () from /lib/libthr.so.3 (gdb) l 528 } 529 } 530 531 ia->isRunningRun = false; 532 return NULL; 533 } 534 //----------------------------------------------------------------------------- 535 void * AUTH_IA::RunTimeouter(void * d) 536 { 537 AUTH_IA * ia; и вот вывод из консоли. лишнее вырезал. выше ничего интересного. traffcounter.cpp > 18:09:00 > FlushAndRemove() packets: 22272(rem 5185) ip2packets: 44544(rem 10370) user.cpp > 18:09:00 > USER::WriteStat user=kopity users.cpp > 18:09:00 > Sec = 1224331740 users.cpp > 18:09:00 > New Minute. old = 8 current = 9 users.cpp > 18:09:00 > RealDelUser() users to del: 0 users.cpp > 18:09:00 > Del IP Idx traffcounter.cpp > 18:09:00 > DelUser: kamenotes 1/1 addresses deleted. killed 10 states from 1 sources and 0 destinations users.cpp > 18:09:01 > Del IP Idx traffcounter.cpp > 18:09:01 > DelUser: bahtys7 Segmentation fault (core dumped)
  18. Silitra

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

    переодически в поле IP проскакивает значение "1inet_ntoa er" или "192.t_ntoa er" еще бывает "[inet_ntoa er". бывает у нескольких пользователей сразу, чем больше онлайн, тем сильней заметно это явление. проявляется у рандомных ползователей, совершенно случайно, впрочем так же как и исчезает с уменшением нагрузки на сервер. ось FreeBSD 7 оналйн 1К всего >3,5К. stg-2.405.9.8 модуль mysql. если остановить стг, то после попытки старта в stargazer.log 2008-10-15 19:51:00 -- Cannot read conf for user igorek. 2008-10-15 19:51:00 -- User 'igorek' data not read. Parameter IP address. Incorrect IP address: 1inet_ntoa err 2008-10-15 19:51:00 -- USERS: Error: Cannot read users! приходтится править в базе поле IP. не могу понять в чем дело, где копать.
  19. Silitra

    Опрос. Stg+web+mysql

    есть стабильная сборка. много что поправленно. mysql_mod полностью переписан, работает стабильно. 3.5К пользователей около 1К онлайн.. биллинг за месяц не разу не упал. переход на новый месяц прошел без косяков. пишите лс
  20. Silitra

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

    бага или фича судить не нам. ( если в процессе получения данных конфигуратором, попытаться завершить процесс stargazer, то завершатся все потоки кроме traffcounter, на внешние раздражители процесс перестает реагировать, только kill -9 поможет.
  21. Silitra

    Stg-web With Mysql

    модуль mysql_store v.0.68-mutex переодически приводил к падению. начал копать падение происходит при подключении конфигуратора, конкретно, когда модуль sgconfig пытается получить кол-во тарифов вызывая tariffs->GetTariffsNum(), закоментировал. перестал падать в этом месте. начал в другом, Причем работает 2-3 часа нормально и конфигуратор коннектится. теперь проблема при вызове user->ScanMessage() колупаем дальше store->GetMessageHdrs(&hdrsList, login) добавил вывод в syslog { STG_LOCKER lock(&mutex, __FILE__, __LINE__); MYSQL_RES *res; MYSQL_ROW row; char qbuf[MYSQL_QUERY_MAX]="\0"; sprintf(qbuf,"SELECT * FROM messages WHERE login='%s'", login.c_str()); if(MysqlQuery(qbuf)) { syslog(LOG_CRIT, "Couldn't GetMessageHdrs for '%s'(on query).", login.c_str()); return MysqlReConnect(); } if (!(res=mysql_store_result(sock))) { syslog(LOG_CRIT, "Couldn't GetMessageHdrs (on getting result)."); return MysqlReConnect(); } в результате через 2-3 часа видим в messages очень много сторок stargazer: Couldn't GetMessageHdrs for 'vasya' (on query). решил проблему, закоментил в user.cpp в 2-х местах ScanMessage(); теперь не падает в этом месте. дальше новые проблемы, теперь реже чем раньше. стг иногда перестает писать изменения в БД. но работает, не падает. переодически в messages.log наблюдал строчку stargazer: STG mysql_store-mutex MysqlReConnect(). заметил что имеено после MysqlReConnect() перестает писать в базу изменения. И при попытке подключения конфигуратора stg падает в кору. решил заменить в mysql_store.cpp все errorStr на syslog(); и докучи int MYSQL_STORE::MysqlReConnect() const { STG_LOCKER lock(&mutex, __FILE__, __LINE__); syslog(LOG_CRIT, "STG mysql_store-mutex MysqlReConnect()"); if (sock) { syslog(LOG_CRIT, "mysql disconnect on reconnect"); MysqlDisconnect(); } if (!sock) { syslog(LOG_CRIT, "mysql connect on reconnect"); return MysqlConnect(); } return 0; } теперь messages.log stargazer: Couldn't get table 'detailstat_09_2008'. stargazer: STG mysql_store-mutex MysqlReConnect() billing stargazer: mysql disconnect on reconnect billing stargazer: mysql disconnect и так далее миллионы строк. удивился а где "mysql connect on reconnect" ? где бага зарыта, mysql_list_tables не возвращает то что нужно ? почему mysql_close(sock); не закрывает соединение.? и еще в messages каждый день в 00:00 проскакивает stargazer: STG mysql_store-mutex MysqlReConnect()
  22. Silitra

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

    warning: Source file is more recent than executable. это может быть. инменений в сырцах нет, просто заново скомпилированный. скорей всего просто для себя, от какого числа сборка. за 2 дня 2 раза упал в одном и том же месте. (gdb) bt #0 0x2814bfbe in pthread_mutex_lock () from /lib/libthr.so.3 #1 0x0808bc4b in STG_LOCKER (this=0xbf5fa90c, m=0x17e0, __file__=0x80d33ed "user.cpp", __line__=1003) at stg_locker.h:59 #2 0x080a788a in USER::AddTraffStatD (this=0x8, dir=0, ip=1378231610, dport=3476, sport=6357, len=80) at user.cpp:1003 #3 0x0809f4e4 in TRAFFCOUNTER::DelUser (this=0x2843c060, user={_M_node = 0x28c96000}) at traffcounter.cpp:625 #4 0x08090b51 in TRF_IP_BEFORE::Notify (this=0x29bc6da8, oldValue=@0xbf5faaf8, newValue=@0xbf5fab40) at traffcounter.h:244 #5 0x080b7ee2 in USER_PROPERTY<unsigned int>::operator= (this=0x28c96d20, newValue=@0xbf5fab40) at user_property.h:211 #6 0x080a752f in USER::Unauthorize (this=0x28c96008, auth=0x28446000) at user.cpp:581 #7 0x2867bd3d in AUTH_IA::Send_FIN_6 (this=0x28446000, iaUser=0x29ec3014, sip=1447995584, it={_M_node = 0x29ec3000}) at inetaccess.cpp:1772 #8 0x2867bde2 in AUTH_IA::Send_FIN_7 (this=0x28446000, iaUser=0x29ec3014, sip=1447995584, it={_M_node = 0x29ec3000}) at inetaccess.cpp:1781 #9 0x2867eeb6 in AUTH_IA::PacketProcessor (this=0x28446000, buff=0xbf5fadb4 "@", dataLen=64, sip=1447995584, sport=10002, protoVer=7, user=0xbf5fad28) at inetaccess.cpp:1104 #10 0x2867f97e in AUTH_IA::RecvData (this=0x28446000, buffer=0xbf5fad8c "00100", bufferSize=512) at inetaccess.cpp:688 #11 0x2867ffee in AUTH_IA::Run (d=0x28446000) at inetaccess.cpp:521 #12 0x28147b1f in pthread_getprio () from /lib/libthr.so.3 #13 0x00000000 in ?? () изменения сделанные мной в этом патче http://195.184.79.238/stg_2.diff
  23. Silitra

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

    parser.cpp модификация sgconfig, был добавлен вывод для отладки, чтобы понять в каком месте падает 1054 if (tariffs->FindByName(ucr->tariffName.const_data())) 82 строка sprintf(s, "<tariff_num value=\"%d\"/>", tariffs->GetTariffsNum()); проблема решилась коменитированием этой строки. GetTariffsNum() используется только тут. падать в этом месте перестал. printfd(__FILE__, "PARSER_GET_SERVER_INFO 2CreateAnswer\n"); sprintf(s, "<version value=\"%s\"/>", si.serverVersion.c_str()); answerList->push_back(s); //printfd(__FILE__, "PARSER_GET_SERVER_INFO 3CreateAnswer\n"); //sprintf(s, "<tariff_num value=\"%d\"/>", tariffs->GetTariffsNum()); //answerList->push_back(s); printfd(__FILE__, "PARSER_GET_SERVER_INFO 4CreateAnswer\n"); sprintf(s, "<tariff value=\"%d\"/>", 2); answerList->push_back(s); printfd(__FILE__, "PARSER_GET_SERVER_INFO 5CreateAnswer\n"); sprintf(s, "<users_num value=\"%d\"/>", users->GetUserNum()); answerList->push_back(s); printfd(__FILE__, "PARSER_GET_SERVER_INFO 6CreateAnswer\n"); sprintf(s, "<uname value=\"%s\"/>", un); answerList->push_back(s); printfd(__FILE__, "PARSER_GET_SERVER_INFO 7CreateAnswer\n"); sprintf(s, "<dir_num value=\"%d\"/>", DIR_NUM); answerList->push_back(s); printfd(__FILE__, "PARSER_GET_SERVER_INFO 8CreateAnswer\n"); sprintf(s, "<day_fee value=\"%d\"/>", settings->GetDayFee())
  24. Silitra

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

    2.405.25.08.08 + store mysql
  25. Silitra

    Веб-модуль кассира

    Есть решение. но нужен Stg+mysql
×
×
  • Створити нове...