Re[4]: Память на буферы заполучить

Igor Sysoev is at rambler-co.ru
Wed Feb 22 09:19:57 MSK 2006


On Wed, 22 Feb 2006, Anton Maksimenkov wrote:

>>> Внимание вопрос. Вот есть 4 буфера по 512к. Вот клиент запросил
>>> страничку, там ну пускай 10 картинок по 100к. Как будут развиваться
>>> события и использоваться буферы?
> ...
>>>> Это буфера для одного соединения. Файл читается в 512k буфер за один read.
>> Для одного клиента файл прочитается в 4 буфера по 512K.
>> Для второго клиента файл прочитается в 4 буфера по 512K.
>> Для третьего клиента ...
>> Для четвёртго клиента ...
>> Для пятого клиента ...
>> И так далее, пока не кончатся клиенты или память.
>
> Разрешите продолжить.
> Итак, получается, что при подключении клиента выделяется некий так
> скажем "контекст", и в рамках этого "контекста" те 4 блока по 512к.
> Вот клиент запросил страничку и затем к ней 10 картинок по 100к.
> nginx читает 1-й файл в 1-ый буфер. Затем ещё 4, итого 500к занято.
> Следующий, 6-ой файл будет прочитан во 2-ой буфер? Или часть (12к) в
> 1-ый до его заполнения, а остальная часть во 2-ой?
> И главное - как будут развиваться события по выдаче клиенту? Вот
> прочитан 1-ый файл в 1-ый буфер и... будет сразу передаваться, а
> параллельно с этим читаться и по мере окончания чтения передаваться
> остальные файлы?

output_buffers - это буфера на один запрос. По окочанию запроса
они освобожаются. Если клиент откроет одновременно десять запросов,
то в каждом из них будет выделено до 4 буферов по 512К.
Если файл размером в 1К, то выделен будет один буфер 1К (а не 4 по 512К).
По одному соединению можно обработать несколько запросов, они обрабатываются
последовательно.

> Не поставить ли postpone_output вместо 1460 что-то поменьше?

postpone_output запрещает вывод данных в ядро, если накоплено меньше.
Это позволяет посылать полноразмерные TCP пакеты.
Можно поставить меньше.


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





More information about the nginx-ru mailing list