Re: Geo проблема

Igor Sysoev igor на sysoev.ru
Ср Авг 24 12:18:50 UTC 2011


> >> ipblocklist.conf:
> >>
> >> 10.10.10.111    ab|bc;
> >> 10.10.10.189    ab|bc;
> >> 10.10.252.101   bc|defg;
> >> 10.100.10.100   ab|bc|defg;
> >> ...
> >>
> >> ~670,000 линий, всего 13M на диске.
> > На один бит в дереве radix расходуется 32 байта (для 64-битной архитектры).
> > На 32-битный адрес - 1024 байта, то есть, килобайт. Первые биты общие
> > для многих адресов. Сколько адреса займут памяти, грубо можно оценить так:
> > например, если у нас есть 670,000 адресов, отличающихся только последними
> > 16-ти битами (что, скорее всего, достаточно близко к приведённому случаю),
> > то они займут около:
> >
> > 4*8*16*670000 = 327M
> >
> > Для последних 8-ми бит:
> >
> > 4*8*8*670000 = 163M
> >
> > Вообще, geo лучше использует память для CIDR'ов, например, 10.10.10.0/24;
> > В этом случае последние 8 бит не хранятся, сохраняя 8К.
> >
> 
> Система 64 битовая. Список представляется мне разорванный (не CIDRовый), 
> но вроде все биты меняются.
> Надеялся что более компактно держится в памяти.

Можно попробовать map вместо geo, но будет долго грузиться.

> Ну а почему удваивается память при HUP?

Потому что nginx сначала обрабатывает новый конфиг и только после успешной
обработки освобождает старый. По идее malloc()/free() должны отдать память
ядру, но не хочет. Для того, чтобы убедиться, что со стороны nginx'а утечек
нет, можно послать -HUP несколько раз - память должна остататься всегда
в удвоенном объёме или меньше, но не увеличивается кратно числу HUPов.


-- 
Игорь Сысоев
http://sysoev.ru



Подробная информация о списке рассылки nginx-ru