[Devel] Nginx при обновлении большого числа пакетов APT

Anton Farygin rider на altlinux.com
Пт Июл 29 11:38:23 MSD 2011


Женя, обсуди пожалуйста это изменение с апстримом.

Я буду тебе очень благодарен, ибо на моих задачах всё работает отлично.

29.07.2011 06:36, Evgeny Sinelnikov пишет:
> Здравствуйте,
>
> хочу сообщить, что вчера мы, в очередной раз, столкнулись с проблемой
> обновления большого числа пакетов аптом, при подключенном
> http-репозитории, когда на севере установлен nginx. Суть проблемы в
> том, что при загрузке пакетов, скачивание некоторых пакетов
> периодически отваливается...
>
> Get:99 http://download.etersoft.ru i586/classic xorg-dri-savage
> 4:7.10.3-alt2 [829kB]
> Get:100 http://download.etersoft.ru i586/classic xorg-dri-mga
> 4:7.10.3-alt2 [835kB]
> Err http://download.etersoft.ru i586/classic xorg-dri-mga 4:7.10.3-alt2
>    Error reading from server - read (104 Connection reset by peer)
> Get:101 http://download.etersoft.ru i586/classic xorg-dri-nouveau
> 4:7.10.3-alt2 [1273kB]
> Get:102 http://download.etersoft.ru i586/classic xorg-drv-nouveau
> 2:0.0.16-alt4 [77.4kB]
> ...
> Get:199 http://download.etersoft.ru i586/classic thunderbird
> 3.1.9-alt1.20110409 [9581kB]
> Get:200 http://download.etersoft.ru noarch/classic firefox-yandexbar
> 5.2.3-alt1 [1693kB]
> Err http://download.etersoft.ru noarch/classic firefox-yandexbar
> 5.2.3-alt1
>    Error reading from server - read (104 Connection reset by peer)
> Get:201 http://download.etersoft.ru i586/classic xulrunner-2.0
> 2.0.1.0-alt1 [1268kB]
> Get:202 http://download.etersoft.ru i586/classic firefox-4.0 4.0.1-alt1 [1228kB]
> ...
> Get:299 http://download.etersoft.ru i586/classic libpulseaudio
> 0.9.22-alt3 [431kB]
> Get:300 http://download.etersoft.ru i586/classic libSDL 1.2.14-alt6
> [169kB]
> Err http://download.etersoft.ru i586/classic libSDL 1.2.14-alt6
>    Error reading from server - read (104 Connection reset by peer)
> Get:301 http://download.etersoft.ru i586/classic libjasper
> 1.900.1-alt2.qa2 [124kB]
> Get:302 http://download.etersoft.ru i586/classic libopenraw-gnome
> 0.0.8-alt2 [4799B]
> ...
>
> Просмотрев код nginx и поотлаживая его, на воспроизводимом примере
> (примерно каждый 100 пакет, как видно выше, стабильно отваливался), я
> нашёл точку, в которой возникает беда. Беда возникает при отключении
> соединения. В keep_alive режиме соединение на сервере закрывалось не
> сразу, а после некоторого числа итераций. Собственно проблема с
> закрытием возникает из-за использования в nginx SO_LINGER, небольшое
> описание этого режима я нашёл здесь:
>    http://kalinin.ru/programming/network/29_10_00.shtml
>
> В итоге я сделал такой патч:
> diff --git a/nginx/src/http/ngx_http_request.c
> b/nginx/src/http/ngx_http_request.c
> index 2cef4fa..e2973c8 100644 (file)
> --- a/nginx/src/http/ngx_http_request.c
> +++ b/nginx/src/http/ngx_http_request.c
> @@ -2146,7 +2146,7 @@ ngx_http_finalize_connection(ngx_http_request_t *r)
>           ngx_http_set_keepalive(r);
>           return;
>
> -    } else if (r->lingering_close&&  clcf->lingering_timeout>  0) {
> +    } else if (clcf->lingering_timeout>  0) {
>           ngx_http_set_lingering_close(r);
>           return;
>       }
>
> Изменение доступно здесь:
> http://git.altlinux.org/people/sin/packages/nginx.git
> http://git.etersoft.ru/people/sin/packages/nginx.git
>
> Суть патча в том, чтобы не использовать принудительное отключение
> соединения при использовании опции lingering_timeout. Мне, при нашей
> скорости обмена, оказалось достаточно lingering_timeout равного 1.
> Исходного поведения можно добиться выставив lingering_timeout в 0.
>
>



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