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