On Fri, Jul 01, 2005 at 10:18:46AM +0300, Andrew Sitnikov wrote:
VK> Да, но очень не хочется плодить сущности (я имею ввиду squid).
VK> Если есть возможность покрутить переменные в nginx-е - лучше конечно
было бы сделать так.
вы вообще чего там крутить хотите ? не совсем понятно про что вы вообще
говорите
Начнем с начала.:) Игорь утверждает, что запрашиваемые статические картинки
операционная система хранит в памяти. Мне _кажется_, что nginx читает их с
диска. Есть ли какие-то инструментальные методы, позволяющие подтвердить
или опровергнуть эти утверждения?
По топу я вижу, что большое количество памяти куда-то используется:
last pid: 8534; load averages: 1.35, 1.52, 1.55 up 0+10:07:01
11:54:45
Inactive - pages not actively used by programs which are dirty and (at some
point) need to be written to their backing store (typically disk).
Это кэш грязных страниц. Сюда попадает вся память, которая содержит редко
модифицируемые данные - скорее всего это данные твоей mysql.
Cache / Buf - вот это уже дисковые кэши. Как я понимаю, при sendfile данные
качаются именно отсюда. Проблема в том, что mysql тоже является
активным потребителем дискового кэша, он тоже сам ничего не кэширует считая
что ядро само разберется. Если размер базы данных + размер
картинок больше дискового кэша, то получается лажа.
Вот картина с реального сервера: 144M картинок, 192M база данных. Катринки
отдаются nginx-ом, остальное проксится на back-end
(apache, php, mysql). Удалось сбалансировать прожорливость php/mysql - в
результате имеем 135 мегабайт свободной памяти. Я думаю имнно этот
показатель следует использовать для демонстрации эфективной работы
дискового кэша.
last pid: 6072; load averages: 0.27, 0.39, 0.39 up 69+12:07:34
12:22:10
На самом деле, 135M Free - это плохо. Если со временем оно уменьшается
до нескольких мегабайт (или пару десятков), то хорошо. Нужно отдавать
эту память php/mysql.
Игорь Сысоев
http://sysoev.ru