fastcgi_cache_lock_timeout
Устанавливает максимальное время ожидания получения блокировки в FastCGI cache. — NGINX HTTP Core
Описание
Директива `fastcgi_cache_lock_timeout` задаёт длительность, в течение которой запрос будет ожидать получения блокировки в FastCGI cache, если другой запрос уже обрабатывает эту запись кэша. Это особенно полезно в сценариях, когда запросы могут сталкиваться при попытке сохранить одинаковое кэшированное содержимое. Если время ожидания истечёт до того, как блокировка будет получена, запрос на блокировку терпит неудачу, что предотвращает длительные задержки для параллельных запросов и позволяет им продолжить выполнение вместо бесконечного ожидания. Эта директива может помочь улучшить время отклика вашего приложения, особенно при высокой нагрузке. Установив `fastcgi_cache_lock_timeout`, вы можете точно контролировать, сколько времени один запрос будет ждать другой, уменьшая задержку и улучшая общий пользовательский опыт в периоды пикового трафика. Директива должна задаваться в соответствующем контексте, таком как `http`, `server` или `location`, и принимает один аргумент — длительность тайм-аута. Когда настроенный тайм-аут достигается, последующие запросы могут получить альтернативный ответ или обрабатываться иначе в зависимости от внутренней логики приложения. Поэтому при выборе значения для этой директивы следует тщательно взвесить поведение блокировок и общую производительность.
Пример конфига
location /api {
fastcgi_pass backend;
fastcgi_cache my_cache;
fastcgi_cache_lock on;
fastcgi_cache_lock_timeout 10s;
}Установка слишком малого значения таймаута может привести к частым ошибкам при получении блокировок, из-за чего несколько запросов могут обрабатываться одновременно, что потенциально может вызвать проблему наплыва запросов к кэшу (cache stampede).
Пользователям необходимо убедиться, что директива `fastcgi_cache_lock` включена, чтобы эффективно использовать `fastcgi_cache_lock_timeout`.
Слишком большие значения таймаута также могут привести к снижению производительности, поскольку запросы могут блокироваться в течение длительного времени.