nginx-1.1.0

Igor Sysoev igor на sysoev.ru
Вс Авг 7 07:30:38 UTC 2011


On Sun, Aug 07, 2011 at 09:26:51AM +0400, Михаил Монашёв wrote:
> Здравствуйте, 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;
> 
> в логе ничего не вижу об изменении поведения кэш-лоадера.

Нужно notice.

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

Каталог это не только файл с именами файлов - это ещё и обращения к
inode'м, которые в общем случае требуют дисковой операции на каждый файл.

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

Да, такая проблема есть. Надо будем исправить.


-- 
Игорь Сысоев
http://sysoev.ru



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