nginx-0.7.44

Igor Sysoev is at rambler-co.ru
Mon Mar 23 22:45:54 MSK 2009


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
-------------- next part --------------
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");
 


More information about the nginx-ru mailing list