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 [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
