Welcome! Log In Create A New Profile

Advanced

Почему кеш nginx создает задержки?

Евгений Удовихин
February 07, 2015 01:26AM
Один php скрипт занимается раздачей статистики с сайта в двух видах.
Кешируется по сути один файл на секунду (так надо). При этом есть два типа
запросов, и кеш настроен их различать. Для первого типа всегда отдается
бекендом с заголовком header("X-Accel-Expires: 0"); а для второго
header("X-Accel-Expires: 1"); Все работает. Запросы первого типа не
кешируются вообще, запросы второго типа кешируются на секунду. В кеше 1
файл как раз второго типа.

А теперь вопрос - почему кеш nginx может создавать задержки. Т.е. вот идут
запросы нормально, время ответа 150мс, и тут вдруг внезапно задержка - от
2с до 20с, бывало. При этом другие запросы к серверу идут как обычно по
расписанию (раз в 2 секунды). Более того, зависший запрос может так и
висеть, когда следующие за ним уже отправились и выполнились. Бывало
выполнялось по 10 следующих запросов за те 20 секунд зависания. И
естественно данные приходили в развисшем запросе устаревшие. Не могу понять
почему такое может быть ...

Параметры кеширования nginx

proxy_cache_path /tmp/site levels= keys_zone=pagecache:1m
max_size=1m;proxy_cache pagecache;proxy_cache_valid
200 1s;proxy_cache_lock on;proxy_cache_lock_timeout
100s;proxy_cache_use_stale updating;proxy_ignore_headers Expires
Cache-Control;if ($arg_callback) {
set $callback callback;
}proxy_cache_key
$scheme$proxy_host$uri$arg_widget$arg_layer$callback;proxy_pass_header
"X-Accel-Expires";sub_filter 'callback' $arg_callback;



Контроль и замена callback - это для jQuery ajax'а фикс, можете не обращать
внимания. Стоит cache_lock + proxy_cache_use_stale updating, т.е. при
ожидании обновления кеша должны отдаваться старые данные. Все так и
происходит во задержек проблем на сервере, проблема явно не тут. Тем более
что последующие за зависшим вопросы проходят нормально, а зависший все еще
висит, явно не ожидание обновления кеша.

Сам ответ на бекенде генерируется в пределах 30мс, проверял по mircotime()
php.

Запросы, которые не попадают в location с кешированием, тоже иногдла
заредживаются, но на пару секунд максимум. Число worker стоит auto, сервер
мощный и не перегружен.

В кеше 1 файл, не думаю что проблема в задержка HDD. Т.е. прям реально в
папке /tmp/site всего 1 файл с кешем. Плюс к тому зависают не только
вопросы из кешируемой группы, но и запросы из некешируемой тоже. Хотя они
всегда должны сразу уходить на бекенд и возвращаться с ответом.
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Почему кеш nginx создает задержки?

Евгений Удовихин February 07, 2015 01:26AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 305
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready