nginx-1.1.0

Михаил Монашёв postmaster на softsearch.ru
Вс Авг 7 05:26:51 UTC 2011


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

Вы писали 7 августа 2011 г., 4:41:31:

> Hello!

> On Sun, Aug 07, 2011 at 01:27:22AM +0400, Михаил Монашёв wrote:

>> Здравствуйте, Igor.
>> 
>> >> >     *) Добавление: уменьшение времени работы загрузчика кэша.
>> >> 
>> >> >     *) Добавление: параметры loader_files, loader_sleep и loader_threshold
>> >> >        директив proxy/fastcgi/scgi/uwsgi_cache_path.
>> >> 
>> >> Большое спасибо. А то грузить кэш по 2-ое суток неудобно. За это время
>> >> он   сильно  вырастал  и  было  сложно  предсказать  свободное  место,
>> >> необходимое для этого роста.
>> 
>> > Было бы интересно услышать, насколько помогло.
>> 
>> Теперь процесс, загружающий кэш, перестал грузить диск. Ранее он
>> конкурировал за диск с обычными процессами.

> Это хорошо.

>> Странно,  что  сейчас  уже более часа грузится кэш. Хотя у меня 3 кэша
>> структуры  1:2  по ~500 файлов в каждой директории. Т.е. надо прочесть
>> всего  3х16х256=12288  директорий  по  ~30кб каждая. Нагрузка на диски
>> сейчас  судя по gstat ~30%. Если сейчас читаются только директории, то
>> ИМХО,  уже  должно  было  всё  считаться.  Но  процесс,  читающий кэш,
>> постоянно в состоянии nanslp находится. loader_files, loader_sleep и
>> loader_threshold дефолтные. Диски SAS Hitachi 140 Gb.

> Это пока в рамках настроек.  При настройках по умолчанию, если не 
> упирается в диск (и threshold не срабатывает), должно занимать 
> минимум

>     (12288 * 500 / 100) * 50ms = 3072s

> Реально - больше, т.к. кроме сна там всё-таки есть и какая-то 
> дисковая активность.  (При этом если на threshold таки наступили 
> хоть раз - минимальное время сразу можно умножать на два.)

> Расскажи, как загрузится.  Для сравнения ещё интересно было бы 
> знать, сколько этот же самый кеш грузился раньше.

Всё ещё грузится :-(

У меня дефолтный уровень логирования:
error_log  /opt/log/nginx/error.log;

в логе ничего не вижу об изменении поведения кэш-лоадера.

ИМХО,  читать  директорию  в  500  файлов  кусочками по 100 файлов нет
никакого  смысла. Наверное сейчас, когда не нужно вычитывать заголовок
каждого файла, логичнее границей итерации считать обращение к диску на
чтение  кусочка  файла  директории. Кроме того, активно работающий кэш
все  свои  поддиректории  заносит  в  кэш  операционки  и их чтение не
приводит к обращению к диску.

Посмотрел  http://trac.nginx.org/nginx/changeset/3975/  и  пришёл    к
выводу,  что  при  загрузке  кэша  легко  попасть  в  ситуацию,  когда
временные  тормоза  с диском приведут к уменьшению loader_files до 1 и
увеличению  loader_sleep  до огромным значений навсегда. Т.е. алгоритм
адаптации  работает  только  в сторону торможения, а разгоняться он не
умеет.

Какое максимальное значение можно в loader_threshold записать?

>> P.S.
>> loader_files, loader_sleep и loader_threshold хорошо бы в доках
>> отразить.

> Just in case:
> http://mailman.nginx.org/pipermail/nginx/2011-August/028323.html

> These paramters are used to control cache loader IO (notably keep
> it low enough to allow other work to be done).

> loader_files=<number>

>     specifies number of files scanned by cache loader per
>     iteration

> loader_sleep=<time>

>     time to sleep after each iteration

> loader_threshold=<time>

>     if iteration takes more than specified time, number of files
>     scanned per iteration is decreased by factor of 2 (once
>     number of files reaches 1, sleep time is increased by factor
>     of 2)

> Default values are:

>     loader_files=100
>     loader_sleep=50ms
>     loader_threshold=200ms

Спасибо.

-- 
С уважением,
 Михаил                          mailto:postmaster at softsearch.ru



Подробная информация о списке рассылки nginx-ru