Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: nginx-0.7.44
On Mon, Mar 23, 2009 at 07:00:19PM +0300, Монашёв Михаил wrote:
> Здравствуйте, Игорь.
>
> >> > *) Добавление: предварительная поддержка кэширования в модуле
> >> > ngx_http_proxy_module.
> >>
> >> Сколько байт тратится в зоне на хранение информации об одном файле?
>
> > 64 байта на FreeBSD/i386
> > 128 - на FreeBSD/amd64. На других 64-битных платформах должно быть тоже 128.
>
> >> Чистка кэша происходит перебором всех директорий с кэшем и поиском
> >> тех файлов, которые проэкспарились в зоне или отсутствует в ней?
>
> > Нет. В зоне ключи хранятся в LRU-очереди по inactive, удаляются только
> > давно неиспользованные данные, независимо от их валидности. Раз в сутки
> > перебираются все каталоги и из них удаляются файлы, отсутствущие в зоне.
>
> Выходит, что текущий алгоритм не позволяет хранить в кэше данные, к
> которым не обращались сутки. Любой рестарт приводит в последствии к
> удалению того, что не успело попасть в зону. Вот ребутнул я ночью
> сервер, потом наступает 5 утра и весь кэш стирается. Конечно можно
> помнить про это и поменять время удаления, а потом проснуться и днём
> поменять время обратно. Но как-то неудобно...
Прилагаемый патч запрещает чистку, если со времени запуска не прошло
время inactive. Ставишь inactive=2d и будет храниться двое суток.
> Очень не хватает возможности хранить кэш размера не более, чем Х
> гигов. Т.е. при старте сквидить в фоновом режиме, и как все файлы
> всосутся в зону, начинать удалять их с хвоста, если они вылезают за
> размеры кэша. Сквидить можно умно, например ограничив количество
> дисковых операций в единицу времени, дабы можно было регулировать
> нагрузку на диск.
В принципе, это сделать можно. Сейчас есть специальный процесс
"nginx: cleaner process", который
1) удаляет файлы по мере того, как они становятся ненужными,
2) и чистит кэш раз в сутки.
Его можно озадачить подчитыванием на старте и слежением за суммарным объёмом.
И ещё нужно переменовать его в "cache manager process".
--
Игорь Сысоев
http://sysoev.ru
Index: src/http/ngx_http_file_cache.c
===================================================================
--- src/http/ngx_http_file_cache.c (revision 1917)
+++ src/http/ngx_http_file_cache.c (working copy)
@@ -895,8 +895,9 @@
now = ngx_time();
- if (now >= cache->next_clean_time) {
-
+ if (now >= cache->next_clean_time
+ && now >= cache->created + cache->inactive)
+ {
ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
"clean unused cache files");
|