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
|