Потребление памяти воркерами

Igor Sysoev is at rambler-co.ru
Wed Dec 12 17:21:20 MSK 2007


On Wed, Dec 12, 2007 at 03:09:44PM +0200, Olexander Shtepa wrote:

> > SSL используется ?
> 
> Да, почти каждый server имеет SSL конфигурацию.
> 
> Еще, кажется я что-то нащупал.
> Увеличение client_header_buffer_size с 1к до 4к радикально уменьшило
> потребление памяти, даже при возращении keepalive_timeout к прежнему
> значению в 65 секунд, размер воркера не превышает теперь 13М.
> 
> В порядке эксперимента устроил пробные тесты на тестовой машине:
> ab -n 10000 -c 1 -H ... {10 хидеров по 110 байт} http://localhost/small.html
> И несколько конфигураций nginxа (SSL нигде нету в конфигурации):
> 1. client_header_buffer_size 1к;
> 2. client_header_buffer_size 4к;
> 3. client_header_buffer_size 1к; large_client_header_buffers 4 2k;
> 4. client_header_buffer_size 1к; large_client_header_buffers 4 8k;
> 5. client_header_buffer_size 1к; large_client_header_buffers 4 64k;
> 
> Размеры воркера под конец теста (после завершения теста размер уменьшался
> до начального в ~2М):
> 1. ~42М (4к на 1 запрос)
> 2. ~2М (размер немного поднялся, но всего на ~100к)
> 3. ~22М (2к на 1 запрос)
> 4. ~50М (4.8к на 1 запрос)
> 5. ~53М (5.1к на 1 запрос)
> Изминение количества буферов в large_client_header_buffers на результат не
> влияло.
> Примечательно, что в случае 2, скорость отдачи была ~12к #/sec, а для всех
> остальных - 2-3к #/sec, причем под конец теста скорость отдачи ощутимо
> падала, что хорошо было видно на глаз.

ab запускался с -k или нет ?
Прилагаемый патч должен помочь.


-- 
Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
Index: src/http/ngx_http_request.c
===================================================================
--- src/http/ngx_http_request.c	(revision 1027)
+++ src/http/ngx_http_request.c	(working copy)
@@ -2093,7 +2093,7 @@
 
     if (hc->free) {
         for (i = 0; i < hc->nfree; i++) {
-            ngx_pfree(c->pool, hc->free[i]);
+            ngx_pfree(c->pool, hc->free[i]->start);
             hc->free[i] = NULL;
         }
 
@@ -2105,7 +2105,7 @@
 
     if (hc->busy) {
         for (i = 0; i < hc->nbusy; i++) {
-            ngx_pfree(c->pool, hc->busy[i]);
+            ngx_pfree(c->pool, hc->busy[i]->start);
             hc->busy[i] = NULL;
         }
 


More information about the nginx-ru mailing list