ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Странное поведение кэша nginx



Здравствуйте.

On 06/22/2011 16:36, Maxim Dounin wrote:

         open_file_cache max=2048 inactive=600s;
         open_file_cache_valid 2000s;
         open_file_cache_min_uses 1;
##      open_file_cache_errors on;

Вы сказали nginx'у кешировать открытые файловые дескрипторы и
информацию о размере файлов в течение 2000 секунд.  Если при этом
неатомарно изменить файл - то представление nginx'а о
размере файла перестанет соответствовать реальности на указанные
2000 секунд.  В результате Content-Length в ответе будет один, а
реально имеющихся данных в ответе - меньше (или столько же, но не
все данные из файла).  В первом случае с точки зрения браузера
ответ будет "не завершён" пока nginx не закроет соединение по
завершению keepalive_timeout.

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

Правильное (и единственное) решение - обновлять файлы атомарно.
Т.е. писать новый (временный) изменённый файл, а потом атомарно
(mv подойдёт) переименовывать его в файл с правильным именем.

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


Я провел следующий эксперимент - поставил open_cache_valid = 30s, теперь я после изменения файла получаю верную копию файла 1 раз в 30 секунд (видимо, после инвалидации кэша), затем опять получаю его кусок. А конфигурации с таким же конфигом nginx и правда работают нормально - на протяжении какого-то времени они отдают старые копии файла, а затем - обновленную версию. Да, и если я делаю
mv orig_file.xml orig_file.xml.1
vi orig_file.xml.1 //Изменяю файл
mv orig_file.xml.1 orig_file.xml - то опять получаю от сервера один раз в 30 секунд корректный ответ, а затем - куски файла.

--
С уважением,
Александр Пыхалов,
системный администратор ЮГИНФО ЮФУ.
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.