Я постоянно вижу эту ошибку в журналах nginx:
[crit] 30165#0: ngx_slab_alloc() failed: no memory in cache keys zone "api-data-cache"
Глядя на каталог, используемый для ключевой зоны кеша, я вижу, что он парит вокруг 326 МБ отметка:
du -s /usr/local/nginx/cache/
326652
Однако мой nginx.conf указывает max_size
из 1 ГБ, поэтому места должно быть достаточно:
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=api-data-cache:8m max_size=1g inactive=600m;
proxy_cache_key "$scheme$host$request_uri/$device_type$cookie_w3tc_referrer";
proxy_cache_use_stale updating timeout http_500 http_502 http_503 http_504;
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
Что здесь может происходить? На диске достаточно свободного места (> 50 ГБ), и после того, как в документация, Я немного растерялся.
Тебе надо увеличить размер разделяемой памяти на keys_zone
вместо того max_size
.
Кража ответа от эта тема
keys_zone = api-data-cache: 8 мес. определял зону общей памяти с именем
api-data-cache
с максимальным размером 8 МБ. Он содержит все активные ключи и метаданные кеша. Таким образом, всякий раз, когда nginx проверяет, была ли страница кэширована, он сначала обращается к зоне общей памяти, а затем ищет местоположение фактического кеша в/usr/local/cache/nginx
если кеш существует.
Из официальная документация, это говорит в одной мегабайтовой зоне можно хранить около 8 тысяч ключей. Итак, в зависимости от вашего приложения вам необходимо увеличивать его по мере необходимости.