Re: оптимизация модуля: переполнения и блокировки

Valery Kholodkov valery+nginxru на grid.net.ru
Вт Ноя 15 14:25:13 UTC 2011


----- minya <nginx-forum at nginx.us> wrote:
> Valery Kholodkov Wrote:
> -------------------------------------------------------
> > Память из-под ngx_chain_t и ngx_buf_t
> > освободиться по завершению
> > запроса.
> > Память под чтение данных
> > освободиться по завершению
> > отправки, 
> Какое из событий когда наступает?

Ну так скажем, любая память выделенная из пула запроса будет освобождена по окончанию запроса (после записи в лог и т.д.).

Если из пула выделена память под чтение, то она обычно не освобождается, а повторно используется (будем считать, что она таким образом освобождается). Это делается в частности, чтобы не пережрать память.

> Ответ
> может быть достаточно большим. Если он
> целиком живет в памяти и запросов
> много, то можно пережрать память и
> загнать процесс в своп. С другой
> стороны, то запрос может выполняться
> достаточно долго. Количество запросов,
> обрабатываемых одновременно - не такое
> большое. Это количество ядер. Если
> количество подключений достаточно
> велико, и мы используем блокирующее
> чтение, то с хорошей вероятностью все
> ядра будут заняты ожиданием
> ввода-вывода, и большинство запросов
> будут ждать, пока они освободятся.
> Таким образом, мы сильно деградируем по
> времени ответа.

Было бы неплохо, если бы Вы объясняли более конкретно. Я опять ничего не понял. 

> > а если
> > используется sendfile, то она
> > даже и не выделиться.
> не совсем понял, как это реализовать

Для этого достаточно засубмитить в nginx буферы с флагом is_file и инициализированным начальным и конечным смещением а файле. nginx сам разберется какой метод отправки использовать.

-- 
Regards,
Valery Kholodkov


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