я на досуге поизучал это место кода, тоже пришел к мнению, что закончилась область shared memory (диагностика могла бы быть более развернутая в логе).
я пока склоняюсь к мнению, что это не должно быть фатальным, ну не смогли положить в кеш, чего горевать то. каких-то серьезных аргументов за то, что в этом случае надо фейлить, пока не придумал. 8 июня 2016 г., 0:12 пользователь Maxim Dounin <mdou...@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
_______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru