Re: 500-я ошибка при использовании кеша

Илья Шипицин chipitsine на gmail.com
Вт Июн 7 19:28:41 UTC 2016


я на досуге поизучал это место кода, тоже пришел к мнению, что закончилась
область shared memory (диагностика могла бы быть более развернутая в логе).

я пока склоняюсь к мнению, что это не должно быть фатальным, ну не смогли
положить в кеш, чего горевать то. каких-то серьезных аргументов за то, что
в этом случае надо фейлить, пока не придумал.

8 июня 2016 г., 0:12 пользователь Maxim Dounin <mdounin на mdounin.ru> написал:

> Hello!
>
> On Thu, Jun 02, 2016 at 11:37:52PM +0500, Илья Шипицин wrote:
>
> > Добрый день!
> >
> > используем кеш около 4-х лет.
> >
> > сегодня случилась 500-я ошибка с вот такой записью в логе
> >
> > 2016/06/02 14:50:07 [alert] 89233#0: could not allocate node in cache
> keys
> > zone "static"
> >
> > насколько я вижу по коду, это приводит к 500-му статусу.
> >
> > какая логика была заложена в это поведение ? казалось бы, не получилось
> > сохранить объект в кеше, не беда, отдаем как есть.
>
> "Не получилось" - редкое событие, в большинстве случаев связанное
> с фатальными проблемами.  Разделять фатальные и нефатальеные
> проблемы, и соответственно по разному их обрабатывать - можно, но
> пока такой необходимости приминительно к заканчивающемуся в месту
> в зоне разделяемой памяти - не возникало.
>
> > и, собственно, в чем была наша ошибка конфигурации кеша, почему оно не
> > вытеснило старые элементы?
> >
> > кеш вот такой
> >
> >     proxy_cache_path /var/tmp/nginx/cache levels=2 keys_zone=static:5m
> > inactive=210m max_size=500m;
> >     proxy_cache_key "$scheme$http_host$request_uri$is_args$args";
>
> Сконфигурированная зона разделяемой памяти - 5 мегабайт, т.е.
> где-то 40 тысяч элементов.  Такой размер зоны будет достаточен,
> если выполняется одно из следующих условий:
>
> - Средний размер элемента в кеше превышает 10 килобайт (т.к.
>   max_size = 500 мегабайт);
>
> - В кеш сладывается меньше 3 элементов в секунду (т.к. inactive =
>   210 минут).
>
> В остальных случаях будет зона разделяемой памяти будет
> переполняться и будет работать механизм экстренного вытеснения
> старых элементов.  После вытеснения - делается попытка выделить
> память под элемент ещё раз.  Нюанс состит в том, что
> свежеосвобождённую память может сразу же занять другой рабочий
> процесс.  Вероятно, именно это и произошло в описанном случае.
>
> В nginx 1.9.13+ cache manager, помимо inactive/max_size, умеет ещё
> и следить за количеством элементов кеша.  Однако эта логика
> включается только когда переполнение уже случилось, так что
> полностью от проблем - не избавляет.
>
> Лучше всего конфигурить кеш так, чтобы зона не переполнялась и
> необходимости в экстренном вытеснении старых элементов - не
> возникало.
>
> --
> Maxim Dounin
> http://nginx.org/
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20160608/f9a4d4c0/attachment.html>


Подробная информация о списке рассылки nginx-ru