On Fri, 26 Nov 2004, Konstantin N. Bezruchenko wrote:
> Из документации на сайте непонятно или не полностью понятно значение
> некоторых директив в конфиге. В частности этих:
>
> connection_pool_size 256;
Изначальный размер пула соединения. Пул - это такая память, из которой
выделяются блоки памяти, а освобожаются все вместе при разрушении пула.
Пулы в nginx похожи на пулы в Apache с той разницей, что в nginx блоки
больше одной страницы (4K на x86) всегда выделяются не из самого пула,
а malloc()ом, но они остаются привязаны к пулу. Кроме того, такие блоки
можно освобожать до разрушения пула. Например, ngx_http_gzip_module
сразу после завершения сжатия освобожает память, которую использовал zlib.
В данном случае размер пула 256 байт. Куски до примерно ~250 будут выделятся
из пула, всё что больше - malloc(). Когда пул заканчивается, выделяется
ещё 256 байт и так далее.
> client_header_buffer_size 1k;
Буфер для чтения заголовка запроса клиента. 1K вполне достаточно. Однако
некоторые телефоны с wap'ом шлют немерянные заголовки, в которых одна строка
может быть в полтора килобайта. Специально для таких запросов сделаны
> large_client_header_buffers 4 2k;
В данном случае выделяется до 4 буферов размером 2K.
> request_pool_size 4k;
Пул запроса. Живёт только на время обработки запроса. В keep-alive
используется пул соединения.
> output_buffers 1 32k;
> Что в данном случае значит число '1'?
Один буфер размером в 32K. output_buffers используются, если файл нужно
читать с диска, например, когда не используется sendfile или ответ нужно сжать
или перекодировать.
> postpone_output 1460;
Фрагменты ответов размером до 1460 байт не будут передаваться в ядро.
Уменьшает число мелких пакетов.
> send_lowat 12000;
Ядро будет сообщать о готовности сокета к записи, если в ядерном буфере
свободно не менее 12000 байт. Уменьшает число переключений из ядра в nginx.
С этим параметором нужно быть осторожным - например, под FreeBSD он не
должен быть больше, чем sysctl net.inet.tcp.sendspace. На старте под
FreeBSD nginx сообщает, если send_lowat больше, но этот sysctl можно
менять в процессе работы.
> keepalive_timeout 75 20;
> Что в данном случае значит '75'?
Первое число - время, в течение которого nginx держит keep-alive соединение.
0 запрещает keep-alive.
Второе число - время, передаваемое в заголовке "Keep-Alive: timeout=<###>".
Второго параметра может и не быть. Кроме того, эти параметры могут быть
разными.
Заголовок "Keep-Alive" понимает Mozilla и Konqueror.
MSIE закрывает соединение примерно через минуту. Opera держит очень долго.
Игорь Сысоев
http://sysoev.ru