Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ngx_http_limit_conn_module: жучок пр и ограничении соединени й?
- To: nginx-ru@xxxxxxxxx
- Subject: Re: ngx_http_limit_conn_module: жучок пр и ограничении соединени й?
- From: Dmitry Dedukhin <dedukhin@xxxxxxx>
- Date: Fri, 23 Dec 2011 16:39:12 +0400
- Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:References:Subject:To:MIME-Version:From:Date:Message-ID; bh=c/xPFFdXb3VFjHmeS3aD3s8r5uQy8Izpw9EUqBASgAI=; b=IopK9NOPqRjXf8RiMltYoyK2ERvKye0LZ7MTvKnTIryW5TzMe96P/Xrp2DXob0HUG/k6ZY8kgFwLMjaBLf1tEB3eMinOcmpWW9kykfflvXmFghsVI5xSo3TunkHlrb5+;
- In-reply-to: <20111223122337.GL67687@xxxxxxxxxx>
- References: <4EF41CBD.4000508@xxxxxxx> <20111223122337.GL67687@xxxxxxxxxx>
23.12.2011 16:23, Maxim Dounin пишет:
Hello!
On Fri, Dec 23, 2011 at 10:16:29AM +0400, Dmitry Dedukhin wrote:
Добрый день.
CentOS 5.
/usr/sbin/nginx -V
nginx: nginx version: nginx/1.0.9
nginx: built by gcc 4.1.2 20080704 (Red Hat 4.1.2-46)
nginx: TLS SNI support disabled
nginx: configure arguments: --prefix= --with-poll_module
--conf-path=/etc/nginx/nginx.conf --sbin-path=/usr/sbin
--error-log-path=/var/log/nginx/nginx.error.log
--http-log-path=/var/log/nginx/nginx.log
--http-client-body-temp-path=/var/spool/nginx/tmp/client
--http-proxy-temp-path=/var/spool/nginx/tmp/proxy
--http-fastcgi-temp-path=/var/spool/nginx/tmp/fastcgi
--pid-path=/var/run/nginx.pid --user=mail --group=mail
--with-http_ssl_module --with-select_module --with-poll_module
--with-http_ssl_module --with-md5=YES --with-http_realip_module
--with-http_stub_status_module --with-http_sub_module
--with-http_addition_module --with-http_dav_module
--add-module=./vkholodkov-nginx-upload-module-8d271b1
--add-module=./evanmiller-mod_zip-2657fc8
--add-module=./vkholodkov-nginx-eval-module-125fa2e
Кусочек конфига:
limit_zone dnl $binary_remote_addr 5m;
location /d2/ {
...
limit_conn dnl 3;
...
}
Аптайм nginx'а около месяца:
Active connections: 1728
server accepts handled requests
12730717 12730717 12684554
Reading: 28 Writing: 1700 Waiting: 0
Несмотря на заданное в конфиге ограничение в 3 соединения, по
крайней мере для одного IP-адреса nginx позволяет только 1
соединение, если больше - возвращает 503 ошибку.
Вполне вероятно, что неверное ограничение может действовать и на ряд
других IP-адресов, в то время как для большей части ограничение
работает корректно.
С чем это может быть связано и куда копать?
Может ли это быть связано с коллизиями crc32 ?
Может ли при каких-то условиях "залипнуть" счетчик lz->conn ?
Например, не произошел вызов функции ngx_http_limit_zone_cleanup и,
соответственно, декрементирование счетчика, либо наоборот, произошел
"лишний" вызов ngx_http_limit_zone_cleanup и счетчик стал равен
максимальному u_short ?
PS: nginx на этом сервере пока не рестартован, поэтому могу что-то
посмотреть, прицепившись через gdb
grep -f '[alert]' /path/to/error/logs
Скорее всего за прошедший месяц рабочие процессы падали и/или их
некорректно убивали, в результате в зоне не были уменьшены
счётчики соединений.
Очистить счётчики можно с помощью процедуры обновления
исполняемого файла на лету.
В логе куча записей вида:
2011/12/23 00:00:41 [error] 2734#0: *22996338 limiting connections by
zone "dnl" while sending to client ...
может что-то конкретное надо искать?
Кстати, почему директива limit_conn_log_level warn; не подавляет эти
записи в еррор-логе? Или я не так понял её?
error_log /path/to/error.log error;
server {
...
limit_conn_log_level warn;
location /d2/ {
...
limit_conn dnl 3;
...
}
}
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
|