Ддос атака с хаба

Общение админов хабов и их юзеров.
Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 10 фев 2014, 14:45

HackFresse писал(а):Не стоит хвататься за одно, не доделав до конца другое, много времени будет на переключение тратиться, + многократно усложненный дебаг.


я каждый день переключаюсь на разные задачи: oracle, linux, C++ Builder, вечерами - VC++ и флайлинк.
также дубликатная посылка данных в один UDP порт это разве не усугубление ddos?

HackFresse писал(а):Видел ситуацию, когда один файл у одного юзера через один хаб качается, а на другом статус показывает, что я 98 в очереди.


Как это сделано - можешь рассказать на уровне протокола - может это фишка грея, он там вроде на уровне хаба что-то умеет срезать?
У флая специально была сделана защита чтобы один файл не качался с одного юзера через разные хабы (иначе тратятся слоты т.к. они глобальные).
и она правда плохо работает и иногда пропускает
проблема отражена тут:
http://code.google.com/p/flylinkdc/issu ... il?id=1102

Когда вы вводите поиск файла X , то в результатах поиска отображается этот файл у одного юзера но сидящего на N разных хабах.
при этом
* на вашем клиенте сетевой интерфейс принял N однотипных UDP пакетов и героически их распарсил построив дерево результата
* на другой стороне клиент N-раз! произвел поиск по своей шаре файл X и сформировал эти дубликатные запросы.

Почему так сделано? это по-моему намного хуже экзотических ддос от извращенцев-админов.

Аватара пользователя
KCAHDEP
 
Хаб: dchub://dc.kcahdep.online
 
Сообщения: 244

Сообщение 10 фев 2014, 14:46

slav писал(а):попробовал линуксовские клиенты и... установил Wine - дальше пользуюсь ФлайЛинком.
Вот за это точно какахами закидают не отмоешься :-D

Аватара пользователя
KCAHDEP
 
Хаб: dchub://dc.kcahdep.online
 
Сообщения: 244

Сообщение 10 фев 2014, 14:53

вот кто бы под ios сделал хоть какой нибудь клиент... :-) а то там совсем с этим печалька :-(

Аватара пользователя
slav
 
Хаб: adc://kremlin.ru
 
Сообщения: 617
Откуда: Интернет

Сообщение 10 фев 2014, 14:57

KCAHDEP писал(а):Вот за это точно какахами закидают не отмоешься :-D

У меня отмазка есть: Я новичок в Линуксах. А те, кто переходят из одной системы, у тех всегда "ломка" по бывшей. :'( . Особенно, если в ней проработал много лет и всё устраивало :-) .

А вообще, у меня такое подозрение, что линуксовские клинты ДЦ++ давно заброшены и много лет не обновлялись. Так, что твоё желание о том, что было бы не плохо, если бы Флай появился бы и для Линукса, я поддерживаю. Будем надеяться, что найдётся человек, который допилит линуксовские клиенты хотя бы до уровня Флая (можно и лучше, ибо о виндовских прогах мне скоро придётся забыть и найти им всем аналоги, либо отказаться совсем) ;-)

Аватара пользователя
KCAHDEP
 
Хаб: dchub://dc.kcahdep.online
 
Сообщения: 244

Сообщение 10 фев 2014, 15:09

slav писал(а):А вообще, у меня такое подозрение, что линуксовские клинты ДЦ++ давно заброшены

https://launchpad.net/~tehnick/+archive/tehnick недавно только обновился eiskalt

Аватара пользователя
andruw
 
Сообщения: 96

Сообщение 10 фев 2014, 17:21

slav писал(а):ибо о виндовских прогах мне скоро придётся забыть и найти им всем аналоги, либо отказаться совсем

Мечты... в итоге всеравно всё будет через wine
Последний раз редактировалось andruw 10 фев 2014, 17:26, всего редактировалось 1 раз.

Аватара пользователя
andruw
 
Сообщения: 96

Сообщение 10 фев 2014, 17:32

flylinkdc писал(а):если подобны ситуации отрабатывать заведя короткоживущий хеш-мап с ключем IP+Port+TTH и слать только один UDP пакет экономя траф и свой и клиентов...
по ADC по-моему ситуация аналогичная...

Обсуждаем?

Всё верно. А в пассиве происходит аналогично?

Аватара пользователя
andruw
 
Сообщения: 96

Сообщение 10 фев 2014, 17:33

Да, в пассиве наверно надо всетаки слать всем

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 10 фев 2014, 17:57

Возвращаемся к детекту ddos - добавил больше логирования
http://code.google.com/p/flylinkdc/sour ... l?r=16546#

версия - только для теста в продакшине не запускать
т.к. ждет диск для детальных логов .

http://yadi.sk/d/iyLldDu2HeK2t

1. логирует с детализацией причины
Код: Выделить всё
[2014-02-10 18:44:59] BlockID=1, [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411][Count limit: 10]        [Target: 178.49.71.133 Port: 1209]      [UserInfo: 178.49.71.133:1209 F?T?0?7?fuck]
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:22] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?1?.
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:23] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?3?anal
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:27] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?4?anal
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:31] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?6?anal
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:35] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?7?anal
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:39] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?8?anal
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:43] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?6?bdsm
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:47] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?7?bdsm
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:51] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?8?bdsm
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:55] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?6?fuck
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:59] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?7?fuck



2. активно скидывает в базу данных FlylinkDC_stat.sqlite статистику которую потом можно перетащить в sql сервер или просто делать запросы из Firefox (https://code.google.com/p/sqlite-manager/) или другой смотрелки sqlite


Код: Выделить всё
SELECT * FROM fly_event where event_value like '%Y4EX5NN3WSQYMLLL3W3FBOTM22XF32RFUL45AAY%'


Скрины:
http://www.flickr.com/photos/96019675@N02/12436181234/
http://www.flickr.com/photos/96019675@N02/12435889503/

Аватара пользователя
Kimbo
 
Сообщения: 772

Сообщение 10 фев 2014, 18:01

Скрытый текст
flylinkdc писал(а):1. логирует с детализацией причины
Код: Выделить всё

[2014-02-10 18:44:59] BlockID=1, [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411][Count limit: 10] [Target: 178.49.71.133 Port: 1209] [UserInfo: 178.49.71.133:1209 F?T?0?7?fuck]
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:22] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?1?.
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:23] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?3?anal
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:27] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?4?anal
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:31] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?6?anal
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:35] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?7?anal
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:39] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?8?anal
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:43] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?6?bdsm
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:47] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?7?bdsm
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:51] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?8?bdsm
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:55] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?6?fuck
[2014-02-10 18:44:59] BlockID=1, Detail info: Time: [18:44:59] Hub info = [Hub: dchub://trolley.di-strict.ru, 178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?7?fuck


Это бот-хаба антипорно ищет :-)
Последний раз редактировалось Kimbo 10 фев 2014, 18:01, всего редактировалось 1 раз.

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 10 фев 2014, 18:11

Kimbo писал(а):Это бот-хаба антипорно ищет


не понял. зачем он это делает?
это ведь не ddos - как отделить?
плка он попадает под критерии...

Аватара пользователя
Kimbo
 
Сообщения: 772

Сообщение 10 фев 2014, 18:14

flylinkdc писал(а):зачем он это делает?

что бы банить порношариков :-) (банить юзеров с порно шарой)
trolley.di-strict.ru [IP домена 178.49.71.133], в логе пишет, что хаб-домен ддосит IP хаба :-D
у бота свой список TTH порнухи, или по ключевым словам, по которым он ищет на хабике, где стоит этот бот, порнуху, запрещает юзеру поиск по тому же списку.
Последний раз редактировалось Kimbo 10 фев 2014, 18:23, всего редактировалось 2 раз(а).

Аватара пользователя
andruw
 
Сообщения: 96

Сообщение 10 фев 2014, 18:38

178.49.71.133:411]UserInfo = 178.49.71.133:1209 F?T?0?3?anal

flylinkdc писал(а):это ведь не ddos - как отделить?...

Я так понял хаб ищет в активе и в поисковом запросе ip получателя соответствует ip хаба. Но я бы не говорил что это не ddos. Если хаб шлет запросы слишком часто, то почему не?

Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 10 фев 2014, 22:39

всё относительно.

что значит "шлет запросы слишком часто"? 1 запрос за 4 секунды, или 4 запроса за 1 секунду? Откуда вдруг появилось ограничение 10 раз за 60 секунд? Вот именно, если вы понимаете, о чем я .. ;-)

Код: Выделить всё
[2014-02-10 22:18:29] BlockID=1, Detail info:  Time: [22:18:28] Hub info = [Hub: dchub://dchub.wplus.net]UserInfo = 
[2014-02-10 22:18:29] BlockID=1, Detail info: Time: [22:18:29] Hub info = [Hub: dchub://dchub.wplus.net]UserInfo =
[2014-02-10 22:28:32] Removed DDoS ban! Count connect = 2972 limit = 10$ConnectToMe for178.156.200.70 Port: 9345
[2014-02-10 22:28:33] BlockID=2, [Hub: dchub://dchub.wplus.net][Count limit: 10] [Target: 178.156.200.70 Port: 9345]
[2014-02-10 22:28:33] BlockID=2, Detail info: Time: [22:28:32] Hub info = [Hub: dchub://dchub.wplus.net]UserInfo =
[2014-02-10 22:28:33] BlockID=2, Detail info: Time: [22:28:32] Hub info = [Hub: dchub://dchub.wplus.net]UserInfo =
[2014-02-10 22:28:33] BlockID=2, Detail info: Time: [22:28:32] Hub info = [Hub: dchub://dchub.wplus.net]UserInfo =

не совсем понятно, но что-то ловит

Код: Выделить всё
[2014-02-10 22:22:35] [CFlyLevelDB::open_level_db] l_status.IsIOError() = IO error: D:\_dc\fl_1\Settings\tth-history.leveldb\MANIFEST-000002: Неверный дескриптор.

[2014-02-10 22:22:35] NmdcHub::onLine Unknown hub = dchub://dc2.net23.info command = myinfo param = $all poiuyt <flylinkdc++ v:r422-x64,m:a,h:7/0/0,s:15>$ $100$$198115557903$
[2014-02-10 22:22:36] NmdcHub::onLine Unknown hub = dchub://dc2.net23.info command = myinfo param = $all ilkos <flylinkdc++ v:r411-x64,m:a,h:4/0/0,s:15>$ $100$$0$
[2014-02-10 22:23:03] NmdcHub::onLine Unknown hub = dchub://dc2.net23.info command = myinfo param = $all 1vetal1 <flylinkdc++ v:(r400),m:a,h:1/0/0,s:15>$ $100 $$96565357102$
[2014-02-10 22:23:10] NmdcHub::onLine Unknown hub = dchub://dc2.net23.info command = myinfo param = $all comrade1999wot <flylinkdc++ v:(r387),m:a,h:5/0/0,s:333>$ $100$$73446342182$
... типа много строчек..
[2014-02-10 22:23:34] NmdcHub::onLine Unknown hub = dchub://dc2.net23.info command = myinfo param = $all 1vetal1 <flylinkdc++ v:(r400),m:a,h:1/0/0,s:15>$ $100 $$96565357102$
[2014-02-10 22:23:34] NmdcHub::onLine Unknown hub = dchub://dc2.net23.info command = myinfo param = $all comrade1999wot <flylinkdc++ v:(r387),m:a,h:5/0/0,s:333>$ $100$$73446342182$
[2014-02-10 22:23:34] NmdcHub::onLine Unknown hub = dchub://dc2.net23.info command = myinfo param = $all пашеку <flylinkdc++ v:r410-x64,m:a,h:7/0/0,s:15>$ $100$persik2393@mail.ru$391664238871$
[2014-02-10 22:23:34] NmdcHub::onLine Unknown hub = dchub://dc2.net23.info command = myinfo param = $all tomasdimm <flylinkdc++ v:r404,m:a,h:7/0/0,s:15>$ $100$$701696323048$

$MyINFO ловить пока не надо.

Если уж есть возможность внедрять сразу кучу фич (хотя это бывает очень редко и делать такое очень тяжело), то очень нужно ведение базы данных в оперативной памяти, и лишь периодический сброс её копии на диск. Поштучная запись чего-то (по одной строке) очень сильно напрягает файловую систему даже до непосредственной раздачи файлов
Вложения
myinfo.jpg
а еще артефакты при отрисовке статусных сообщений
myinfo.jpg (111.95 КБ) Просмотров: 8573
Последний раз редактировалось HackFresse 10 фев 2014, 22:43, всего редактировалось 1 раз.

Аватара пользователя
Kimbo
 
Сообщения: 772

Сообщение 11 фев 2014, 00:34

andruw писал(а):Я так понял хаб ищет в активе и в поисковом запросе ip получателя соответствует ip хаба.

%-) что за бред.
andruw писал(а):Но я бы не говорил что это не ddos.Если хаб шлет запросы слишком часто, то почему не?

а я утверждаю, что это не ддос, это поисковой бот-антипорно, у самого такой стоял когда-то.
Или по твоему хаб сам себя ддосит? вообще чушь несёшь. Можете создателю бота написать вопрос, его ник district

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 11 фев 2014, 03:07

HackFresse писал(а):$MyINFO ловить пока не надо.


Это другой детект и он был давно
тут идет от хаба не известная команда $myinfo
по протоколу команды регистрозависиммая
но данный хаб почему-то приводит все к нижнему регистру и флай его игнорит.

HackFresse писал(а):Если уж есть возможность внедрять сразу кучу фич (хотя это бывает очень редко и делать такое очень тяжело), то очень нужно ведение базы данных в оперативной памяти, и лишь периодический сброс её копии на диск. Поштучная запись чего-то (по одной строке) очень сильно напрягает файловую систему даже до непосредственной раздачи файлов


Тут больше тормозит не диск а проброс сообщения в спикер главного окна для отображения во всплывающей подсказке
вообще логи на то и логи чтобы сразу на диск скидываться - в линуксовых *syslog-ах даже специальная опция есть
сброс сразу на диск чтобы ничего в памяти не висело иначе в случае краха не разберемся в причинах.

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


HackFresse писал(а):всё относительно.

что значит "шлет запросы слишком часто"? 1 запрос за 4 секунды, или 4 запроса за 1 секунду? Откуда вдруг появилось ограничение 10 раз за 60 секунд? Вот именно, если вы понимаете, о чем я ..


Когда я спросил какие выберем критерии - все отмолчались :) вот я придумал первое попавшееся 10 раз в минуту.
давайте корректировать правила бана.

Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 11 фев 2014, 13:22

тут идет от хаба не известная команда $myinfo
по протоколу команды регистрозависиммая
но данный хаб почему-то приводит все к нижнему регистру и флай его игнорит.

подозрение на ботоводство. если не дело в самом хабе, то ошибка в скрипте, который рассылает инфу о юзерах (меняет пришедшую от реальных юзеров или генерит свою фейковую)

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

Мой старый винт периодически похрустывает, но проблема не была значимой при обычной работе (в том числе закачки через uTorrent, грей), пока я не поставил флайлинк. Теперь хруст прям бесит (без раздачи и скачивания файлов).

Запуск очень долгий (создание файлов с базами), при открытии пачки хабов жесточайший зависон и упорное дёргание файла с базой. Хруст при каждой записи в процессе работы (хабов много - записей много) Но самое печальное - после закрытия окна флай процесс еще секунд 20 пытается что-то писать в базу. Слишком частое использование жесткого диска для записи множества мелких порций информации не есть хорошо.

Работа с базой на диске однозначно узкое место. С выносом некоторых таблиц (если не всей базы) в память тормоза приложения заметно уменьшатся

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 11 фев 2014, 13:32

HackFresse писал(а):Работа с базой на диске однозначно узкое место. С выносом некоторых таблиц (если не всей базы) в память тормоза приложения заметно уменьшатся


У флая есть опция ком стороки и настройка
Код: Выделить всё

if (g_DisableSQLiteWAL || BOOLSETTING(SQLITE_USE_JOURNAL_MEMORY))
{
pragma_executor("journal_mode=MEMORY");
}

1. Попробуй запустить флай с FlylinkDC.exe /nowal
2. В настройках вруби галку SQLITE_USE_JOURNAL_MEMORY, // "Keeps a SQLite log file in a memory. It may cause database corruption due an error in the program or system."

Сравни.

У тебя не должны будут создаваться журналы транзакций и все будет лежать в памяти:

Код: Выделить всё
FlylinkDC.sqlite-journal
FlylinkDC_dht.sqlite-journal
FlylinkDC_locations.sqlite-journal
FlylinkDC_mediainfo.sqlite-journal
FlylinkDC_stat.sqlite-journal
FlylinkDC_user.sqlite-journal

Визуально эффект есть?
Также если не сложно замерь скорость конвертации CustomLocations.ini при первом старте но с ключем /nowal
и скинь логи с метриками сколько там msек было и стало.

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 11 фев 2014, 13:34

HackFresse писал(а):Но самое печальное - после закрытия окна флай процесс еще секунд 20 пытается что-то писать в базу.


Если запустить флай с кеем FlylinkDC.exe /sqltrace
Создасться лог трассировки всех sql запросов к базе - посмотри что там оно пишет?

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 11 фев 2014, 13:39

HackFresse писал(а):одозрение на ботоводство. если не дело в самом хабе, то ошибка в скрипте, который рассылает инфу о юзерах (меняет пришедшую от реальных юзеров или генерит свою фейковую)


Что делать - не выдавать такую диагностику?
ведь без нее юзера не заметят что хаб глючный и не сообщат админу чтобы починил.

Также давай вернемся к детекту DDoS-а что скорректировать (я вечером еще немного логи причешу чтобы красивей выводили инфу)
У вас по логам вообще много поймалось злодеев?
у меня что-то за ночь совсем мало...

Аватара пользователя
andruw
 
Сообщения: 96

Сообщение 11 фев 2014, 18:39

Kimbo писал(а):а я утверждаю, что это не ддос, это поисковой бот-антипорно, у самого такой стоял когда-то.Или по твоему хаб сам себя ддосит? вообще чушь несёшь. Можете создателю бота написать вопрос, его ник district

Хаб досит пользователей поисковыми запросами, а те в ответ досят хаб ответами на его поисковые запросы, такой ответ устраивает?

Насчет DDoS-a, поиск альтернатив может слать много tth запросов от одного пользователя пока он качает файлы. Если хаб не режет запросы - все они напрямую отправятся клиентам и это не будет флуд, а вполне полезная нагрузка. Можно сделать глобальный лимит, например отслеживать загрузку сети пользователя или проца и или просто установить фиксированную частоту и включать фильтр только при превышении порогового значения.
Потом я посмотрел, если пользователь ищет в пассиве на нескольких хабах, то ответ надо слать всем, потому как хабы фильтруют часть ответов просто по количеству или запоздавшие.

Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 11 фев 2014, 21:27

flylinkdc писал(а):Если запустить флай с кеем FlylinkDC.exe /sqltrace

http://yadi.sk/d/uSUMFmLBHihUt
http://yadi.sk/d/mKLcaTvsHihWp

Основные проблемы:

Скрытый текст
Код: Выделить всё
[2014-02-11 20:11:34] [Step ] [StartUp] Begin load Geo IP [4 ms]
[2014-02-11 20:11:34] [Start] [GeoIp]
[2014-02-11 20:11:34] Error open D:\_dc\fl_2\Settings\GeoIpCountryWhois.csv
[2014-02-11 20:11:34] [Stop ] [GeoIp] [1 ms, Total: 1 ms]
[2014-02-11 20:11:34] [Step ] [StartUp] End load Geo IP [2 ms and 6 ms after start]
[2014-02-11 20:11:34] [Step ] [StartUp] Begin load Custom Locations [2 ms]
[2014-02-11 20:11:34] [Start] [CustomLocations.ini]
[2014-02-11 20:17:41] [Start] [CustomLocation-sqlite]
[2014-02-11 20:17:44] [Stop ] [CustomLocation-sqlite] [3212 ms, Total: 3212 ms]
[2014-02-11 20:17:44] [Stop ] [CustomLocations.ini] [369337 ms, Total: 369337 ms]

Для импорта файла CustomLocations.ini затрачено 6+ минут
Код: Выделить всё
[2014-02-11 20:23:25] [Start] [Core shutdown]
[2014-02-11 20:23:25] [Start] [User command cleanup]
[2014-02-11 20:23:25] [Stop ] [User command cleanup] [4 ms, Total: 4 ms]
[2014-02-11 20:23:25] [Stop ] [Core shutdown] [8 ms, Total: 8 ms]
[2014-02-11 20:23:59] Founded unknown NMDC connections: Trivi,Mbps,Bo,LanT,T,S:3,/0,S,S:1,:50,L:20000,/0,S:,:15,S:5,Modem,/0,,H:7/2/0,S:45,/1,B.o.,S:15,S,LAN(T1,ISDN,Satellite,BOT,DS,:20,DSL,LAN(T1),:5,WireLess,LAN(T3,Cabl,M,Bot,(P2P5),fast4yo,S:2,Wireless,Chatroom,LAN(T3),KiB/,:16,S:,Cable,/0,S:120,modem, ISDN, Satellite,:1,
[2014-02-11 20:23:59] Founded unknown NMDC tag param: O:30,I:3,O:300,O:130,Volia,O:6,Ukrtelecom,Airbites,Corbina,G:0,O:17,1.5.9,0.790,O:5,1.5.7,0.801,0.830,0.831,0.799,O:3,O:7,O:100,O:85,O:25,O:4,O:2,O:10,O:1,
[2014-02-11 20:23:59] [Start] [Core shutdown]
[2014-02-11 20:23:59] [Stop ] [Core shutdown] [0 ms, Total: 0 ms]

От первого Core shutdown до последнего Core shutdown 34 секунды

В залогированных запросах жесть вида
Код: Выделить всё
[2014-02-11 20:13:05] select id from fly_dic where name='[ru] EUNnet (Urals State Academy of Railway Transport) Екатеринбург' and dic=5
[2014-02-11 20:13:05] begin;
[2014-02-11 20:13:05] insert into fly_dic (dic,name) values(5,'[ru] EUNnet (Urals State Academy of Railway Transport) Екатеринбург')
[2014-02-11 20:13:05] commit;
[2014-02-11 20:13:06] select id from fly_dic where name='[ru] EUNnet (Ural State University (Lyceum) Екатеринбург' and dic=5
[2014-02-11 20:13:06] begin;
[2014-02-11 20:13:06] insert into fly_dic (dic,name) values(5,'[ru] EUNnet (Ural State University (Lyceum) Екатеринбург')
[2014-02-11 20:13:06] commit;

Код: Выделить всё
[2014-02-11 20:18:47] begin;
[2014-02-11 20:18:47] insert into fly_dic (dic,name) values(1,'dchub://tulcea-evolution.ro')
[2014-02-11 20:18:47] commit;
[2014-02-11 20:18:47] select id from fly_dic where name='dchub://gepard-hub.ru' and dic=1
[2014-02-11 20:18:47] begin;
[2014-02-11 20:18:47] insert into fly_dic (dic,name) values(1,'dchub://gepard-hub.ru')
[2014-02-11 20:18:47] commit;
[2014-02-11 20:18:47] select id from fly_dic where name='dchub://electrohub.no-ip.info:888' and dic=1
[2014-02-11 20:18:47] begin;
[2014-02-11 20:18:47] insert into fly_dic (dic,name) values(1,'dchub://electrohub.no-ip.info:888')
[2014-02-11 20:18:47] commit;

Код: Выделить всё
[2014-02-11 20:23:29] begin;
[2014-02-11 20:23:29] insert or replace into user_db.user_info (nick,dic_hub,message_count) values('Джек-Потрошитель',2546,1)
[2014-02-11 20:23:29] commit;
[2014-02-11 20:23:29] begin;
[2014-02-11 20:23:29] insert or replace into user_db.user_info (nick,dic_hub,message_count) values('MAFIA',2546,1)
[2014-02-11 20:23:29] commit;
[2014-02-11 20:23:29] begin;
[2014-02-11 20:23:29] insert or replace into user_db.user_info (nick,dic_hub,message_count) values('Admin',2544,2)
[2014-02-11 20:23:29] commit;
[2014-02-11 20:23:30] begin;
[2014-02-11 20:23:30] insert or replace into user_db.user_info (nick,dic_hub,message_count) values('Commfort',2541,1)
[2014-02-11 20:23:30] commit;

в первой попавшейся статье по оптимизации http://habrahabr.ru/post/204438/
Читаем замечательный цикл статей о SQLite: http://habrahabr.ru/post/149356/

Как итог можно сказать, что связка PHP и SQLite вполне работоспособна для невысоко нагруженных проектов. Достаточно придерживаться некоторых простых правил:
Используем WAL-режим журналирования.
Не забываем устанавливать Busy Timeout.
Запись объединяем в транзакции. Причем не простые, а “BEGIN IMMEDIATE”.

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 11 фев 2014, 22:05

HackFresse писал(а):Используем WAL-режим журналирования.


У меня был WAL режим с момента его появленяи в sqlite - недавно отказался.
т.к. у некоторого мелкого процента пользователей разрушается база
http://www.sql.ru/forum/actualutils.asp ... g=15348853
WAL это относительно новый режим в sqlite - думаю там не все так хорошо
в Firefox на него перешли а вот Google Chrome остался на PERSIST режиме

я добавил новый кей /sqlite_use_wal - счас соберу сборку. сможешь проверить с WAL и PERSIST?

Вот собрал - http://yadi.sk/d/RPx9mYWPHj6xS
Тут и логи по ddos тоже немного другие - посмотри.

ты не написал как отразился на скорости кей /nowal - там вообще нет журнала транзакций и все должно лежать в памяти.

HackFresse писал(а):
[2014-02-11 20:11:34] [Start] [CustomLocations.ini]
[2014-02-11 20:17:41] [Start] [CustomLocation-sqlite]
[2014-02-11 20:17:44] [Stop ] [CustomLocation-sqlite] [3212 ms, Total: 3212 ms]
[2014-02-11 20:17:44] [Stop ] [CustomLocations.ini] [369337 ms, Total: 369337 ms]
Для импорта файла CustomLocations.ini затрачено 6+ минут



в sqlite данные влетели за 3 секунды
что делал флай остальное время - пока для меня вопрос...
можешь посмотреть код функции void Util::loadCustomlocations()
может что заметишь плохое.

Странно то что мой древний нет-бук делает эту операцию намного быстрее...
какие будут идеи для локализации тормозов в 6 минут?

HackFresse писал(а):В залогированных запросах жесть вида
[2014-02-11 20:13:05] select id from fly_dic where name='[ru] EUNnet (Urals State Academy of Railway Transport) Екатеринбург' and dic=5
[2014-02-11 20:13:05] begin;
[2014-02-11 20:13:05] insert into fly_dic (dic,name) values(5,'[ru] EUNnet (Urals State Academy of Railway Transport) Екатеринбург')



Это у меня справочник - классическая нормализация.
ты разве не видел модель хранения грея - они даже путь до файла разбирают на части и хранят "цепочкой"

я сделал это для экономии места - названия сетей иногда повторяются вот так:
89.105.144.0-89.105.145.255 592,[ru] KrosLine Красноярск
89.105.149.0-89.105.150.255 592,[ru] KrosLine Красноярск
89.105.152.0-89.105.153.255 592,[ru] KrosLine Красноярск
89.105.155.0-89.105.155.255 592,[ru] KrosLine Красноярск
89.105.158.0-89.105.158.255 592,[ru] KrosLine Красноярск
93.159.244.0-93.159.247.255 592,[ru] KrosLine Красноярск
95.170.184.0-95.170.191.255 592,[ru] KrosLine Красноярск
178.169.64.0-178.169.71.255 592,[ru] KrosLine Красноярск
178.169.88.0-178.169.95.255 592,[ru] KrosLine Красноярск
я в результирующей таблице после преобразования вместо "[ru] KrosLine Красноярск" (24 байта) храню внешний кей в виде числа (2-4 байта)

Хотя в данном случае может стоит попробовать залить напрямую...
с GeoIPCountryWhois.csv аналогично - страны прокидываю через справочник и получаю ID-шки.
Последний раз редактировалось flylinkdc 11 фев 2014, 22:30, всего редактировалось 1 раз.

Аватара пользователя
HackFresse
 
Сообщения: 507

Сообщение 11 фев 2014, 22:58

что делал флай остальное время - пока для меня вопрос...

не вопрос:
Код: Выделить всё
[2014-02-11 20:11:35] select id from fly_dic where name='[loc] 10 Локалка' and dic=5
[2014-02-11 20:11:35] begin;
[2014-02-11 20:11:35] insert into fly_dic (dic,name) values(5,'[loc] 10 Локалка')
[2014-02-11 20:11:35] commit;
[2014-02-11 20:11:35] select id from fly_dic where name='[loc] 169 Локалка' and dic=5
[2014-02-11 20:11:35] begin;
[2014-02-11 20:11:35] insert into fly_dic (dic,name) values(5,'[loc] 169 Локалка')
[2014-02-11 20:11:35] commit;
....... много строчек ...
[2014-02-11 20:17:40] begin;
[2014-02-11 20:17:40] insert into fly_dic (dic,name) values(5,'[sk] University of Zilina Zilina')
[2014-02-11 20:17:40] commit;
[2014-02-11 20:17:40] select id from fly_dic where name='[zw] Zimbabwe-Online Harare' and dic=5
[2014-02-11 20:17:40] begin;
[2014-02-11 20:17:40] insert into fly_dic (dic,name) values(5,'[zw] Zimbabwe-Online Harare')
[2014-02-11 20:17:40] commit;
[2014-02-11 20:17:40] select id from fly_dic where name='[ru] Zolotoy Klyuchik Мирный республика Саха' and dic=5
[2014-02-11 20:17:40] begin;
[2014-02-11 20:17:40] insert into fly_dic (dic,name) values(5,'[ru] Zolotoy Klyuchik Мирный республика Саха')
[2014-02-11 20:17:40] commit;

Запускал старую сборку с этим параметром - винт начал умирать на моменте парсинга файла с IP, ждать не стал. Новую сборку позже гляну

Первая попавшаяся ссылка по запросу "sqlite insert тормозит" http://glebzhiglov2.ru/?p=140
При большом количестве вставок в таблицу (insert) SQLite сильно тормозит и нагружает жесткий диск.
Это происходит из-за того, что каждый insert пишется на жесткий диск чтобы не потерять данные.
Здесь написано чуть подробнее: http://www.sqlite.org/faq.html#q19.

Есть разные способы решить проблему (тут много информации по оптимизации SQLite, не только для insert).

Я выбрал способ помещать сразу много (пятьдесят) insert-запросов в одну транзакцию.

sqlite_exec(sqlitedb, «begin»,…);
sqlite_exec(sqlitedb, insert_query1,…);

sqlite_exec(sqlitedb, insert_queryN,…);
sqlite_exec(sqlitedb, «end»,…);

В результате 12.5 тысяч insert’ов выполняются за 7 секунд (C++, дебаговая версия).
До этого 6.3 тысяч insert’ов выполнились за 11 минут(!) и нагрели винт до 57 градусов.

(19) INSERT is really slow - I can only do few dozen INSERTs per second

Actually, SQLite will easily do 50,000 or more INSERT statements per second on an average desktop computer. But it will only do a few dozen transactions per second. Transaction speed is limited by the rotational speed of your disk drive. A transaction normally requires two complete rotations of the disk platter, which on a 7200RPM disk drive limits you to about 60 transactions per second.
Transaction speed is limited by disk drive speed because (by default) SQLite actually waits until the data really is safely stored on the disk surface before the transaction is complete. That way, if you suddenly lose power or if your OS crashes, your data is still safe. For details, read about atomic commit in SQLite..

By default, each INSERT statement is its own transaction. But if you surround multiple INSERT statements with BEGIN...COMMIT then all the inserts are grouped into a single transaction. The time needed to commit the transaction is amortized over all the enclosed insert statements and so the time per insert statement is greatly reduced.

Another option is to run PRAGMA synchronous=OFF. This command will cause SQLite to not wait on data to reach the disk surface, which will make write operations appear to be much faster. But if you lose power in the middle of a transaction, your database file might go corrupt.

Аватара пользователя
flylinkdc
 
Хаб: dchub://dc.fly-server.ru
 
Сообщения: 427
Откуда: Караганда -> Липецк

Сообщение 12 фев 2014, 05:52

HackFresse писал(а):что делал флай остальное время - пока для меня вопрос...

не вопрос:


Сомнительно что это происходит после...
Посмотри код функци Util::loadCustomlocations
эта операция "insert into fly_dic" выполняется раньше - при парсинге каждой записи CustomLocations.ini
l_item.m_dic_country_location_ip = CFlylinkDBManager::getInstance()->get_dic_location_id(l_networkName);
когда в памяти формирует массив для сброса готового массива в таблицу location_db.fly_location_ip
сам сброс по твоему логу выполняется 3 секунды
Остальные 6 минут отрабатывают деструкторы локальных объектов и что-то еще...

эти вставки выполняется до(!) команды [Start] [CustomLocation-sqlite]

[2014-02-11 20:17:41] [Start] [CustomLocation-sqlite]
[2014-02-11 20:17:44] [Stop ] [CustomLocation-sqlite] [3212 ms, Total: 3212 ms]
[2014-02-11 20:17:44] [Stop ] [CustomLocations.ini] [369337 ms, Total: 369337 ms]

Массовые инсерты я не знаю как сделать - у меня функция не тупо инсертит, она перед этим еще и ищет чтобы там не было
такого значения + естественно возвращается ID записи которую нашла или только что вставила.
Как поменять алгоритм пока не знаю.

PRAGMA synchronous=OFF - я тоже недавно добавил но это опять для защиты от разрушения БД.

Но самое странное, что твои тормоза аномальные - у меня на нетбуке (atom 1,5) выполняется вся операция за 2 секунды.

кто-то в еще имеет слабый комп? проведите простой эксперимент?

Делается это так
1. включаете системный лог в настройках
2. закрываете флай
3. открываете блокнотом файл CustomLocations.ini - делаете там незначительно изменение
(например добавляете пустую строку чтобы поменялась метка времени.)
4. запускаете флай снова
5. открываете системный лог флайлинка и находите там строки [Stop ] [CustomLocations.ini]
этот кусок кидаете сюда + конфигурацию вашей системы.

Пред.След.

Вернуться в Хаблист



Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 6

cron