Welcome! Log In Create A New Profile

Advanced

Re: Geo проблема

August 24, 2011 04:10AM
On Tue, Aug 23, 2011 at 06:36:44PM -0700, Konstantin Svist wrote:
> У меня почему-то Geo ест слишком много памяти.
>
> Без Geo (top):
>
> PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
> 6324 nobody 20 0 287m 52m 2052 S 0.0 0.2 0:00.03 nginx:
> worker process
> 6304 root 20 0 284m 47m 524 S 0.0 0.1 0:00.02 nginx:
> master process /usr/local/nginx/sbin/nginx -c
> /usr/local/nginx/conf/nginx.conf
>
> Когда добавляю Geo:
>
> PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
> 8151 nobody 20 0 668m 437m 6036 S 25.6 1.4 0:27.91 nginx:
> worker process
> 8113 root 20 0 664m 427m 572 S 0.0 1.3 0:00.28 nginx:
> master process /usr/local/nginx/sbin/nginx -c
> /usr/local/nginx/conf/nginx.conf
>
> А если сделать kill -HUP, то ещё хуже:
>
> PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
> 28811 nobody 20 0 1213m 984m 8188 S 23.7 3.0 2109:47 nginx:
> worker process
> 2721 root 20 0 1213m 978m 2548 S 0.0 3.0 0:37.95 nginx:
> master process /usr/local/nginx/sbin/nginx -c
> /usr/local/nginx/conf/nginx.conf
>
>
>
> nginx.conf:
>
> http {
> geo $ip_blocklist_in $ip_blocklist_out {
> default "OK";
> include ipblocklist.conf;
> }
> proxy_set_header Custom-Ip-Blocklist $ip_blocklist_out;
> fastcgi_param HTTP_CUSTOM_IP_BLOCKLIST $ip_blocklist_out;
> ...
> server { # большинство таких (~20) - не пользую Geo
> ...
> }
> server { # 2 таких - не пользую Geo
> set $ip_blocklist_in '';
> ...
> }
> server { # 1 такой - пользую Geo
> location /xyz {
> set $ip_blocklist_in $arg_i; # client passes IP as
> url param
> ...
> }
> ...
> }
> server { # 4 таких - пользую Geo
> set $ip_blocklist_in $arg_i; # client passes IP as url param
> ...
> }
> }

Замечание, не имеющее отношение к проблеме: вместо set лучше сразу делать
geo $arg_i $ip_blocklist_out

> 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К.


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

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Geo проблема

Konstantin Svist August 23, 2011 09:38PM

Re: Geo проблема

Igor Sysoev August 24, 2011 04:10AM

Re: Geo проблема

Konstantin Svist August 24, 2011 07:48AM

Re: Geo проблема

Igor Sysoev August 24, 2011 08:20AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 183
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 500 on July 15, 2024
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready