Maxim Dounin
June 14, 2017 09:54AM
Hello!

On Wed, Jun 14, 2017 at 02:52:58PM +0300, Domrachev Ivan wrote:

> приветствую
>
> если одновременно использовать
> sendfile on;
> tcp_nopush on;
> proxy_cache_background_update on;
>
> то ломается логика работы proxy_cache_background_update: иногда возвращается часть закэщированного варианта,
> потом енджайникс ждёт секунд 5 и досылает остаток.
> если спрашивать раз в секунду, а proxy_cache_valid any 2s то в логах получается так:
> 127.0.0.1 127.0.0.1 - [14/Jun/2017:14:27:46 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" MISS 5.123
> 127.0.0.1 127.0.0.1 - [14/Jun/2017:14:27:47 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" HIT -
> 127.0.0.1 127.0.0.1 - [14/Jun/2017:14:27:48 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" HIT -
> 127.0.0.1 127.0.0.1 - [14/Jun/2017:14:27:54 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" STALE -
> 127.0.0.1 127.0.0.1 - [14/Jun/2017:14:27:55 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" HIT -
> 127.0.0.1 127.0.0.1 - [14/Jun/2017:14:27:56 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" HIT -
> 127.0.0.1 127.0.0.1 - [14/Jun/2017:14:28:03 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" STALE -
> 127.0.0.1 127.0.0.1 - [14/Jun/2017:14:28:04 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" HIT -
> 127.0.0.1 127.0.0.1 - [14/Jun/2017:14:28:05 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" HIT -
> тайминги запросов
> 5.12 real 0.00 user 0.00 sys
> 0.10 real 0.00 user 0.00 sys
> 0.10 real 0.00 user 0.00 sys
> 5.14 real 0.00 user 0.00 sys
> 0.10 real 0.00 user 0.00 sys
> 0.10 real 0.00 user 0.00 sys
> 5.14 real 0.00 user 0.00 sys
> 0.10 real 0.00 user 0.00 sys
> 0.10 real 0.00 user 0.00 sys
>
> если любую из этих опций отключить:
> sendfile on;
> tcp_nopush on;
> то всё нормализуется

Проблема понятная: TCP_NOPUSH задерживает отправку неполных
пакетов клиенту до снятия соответствующего флага, а флаг снимается
только при переходе в keepalive, т.е. после того, как отработает
background-подзапрос. Простейший workaround - отключить
tcp_nopush.

Как именно это править, и стоит ли вообще править - пока не совсем
понятно. Возможно, стоит снимать TCP_NOPUSH чуть раньше.

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

proxy_cache_background_update

Domrachev Ivan June 14, 2017 07:54AM

Re: proxy_cache_background_update

Maxim Dounin June 14, 2017 09:54AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 75
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready