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