ngx_http_perl_module - исследование
Igor Sysoev
is at rambler-co.ru
Wed Jan 18 22:16:43 MSK 2006
On Wed, 18 Jan 2006, Andrew Velikoredchanin wrote:
> nginx 0.3.22
>
> Сделал несколько тестов через ab с разным к-вом воркеров и вот что обнаружил.
> Запускал скриптик в котором стоит sleep(1) - типа эмуляции долгоиграющего
> скрипта. Проверял с помощью "ab -n 10 -c 10 ..."
>
> 1 воркер:
>
> Time per request: 10117.359 [ms] (mean)
> Time per request: 1011.736 [ms] (mean, across all concurrent requests)
>
> Тут вроде понятно. Запросы исполняются последовательно, каждый примерно 1
> секунду, всего 10 секунд.
>
>
> 2 воркера:
>
> Time per request: 6062.225 [ms] (mean)
> Time per request: 606.222 [ms] (mean, across all concurrent requests)
>
> Из нескольких запусков первый был со значениями 5 секунд и 500 мс, но обычно
> значения около 6 секунд и 600 мс получались.
>
>
> 4 воркера:
>
> Time per request: 3051.070 [ms] (mean)
> Time per request: 305.107 [ms] (mean, across all concurrent requests)
>
> В принципе, нормально и предсказуемо.
>
>
> 16 воркеров (и выше):
>
> Time per request: 2077.931 [ms] (mean)
> Time per request: 207.793 [ms] (mean, across all concurrent requests)
>
> Вот тут не совсем понятно. По идее, если-бы параллельные запросы раздавались
> сразу на все воркеры, то значения должны были-бы быть в районе 1 секунды и
> 100 мс. В данном случае не совсем понятна логика распределения запросов.
>
>
> Игорь, можете прокомментировать эти данные?
Если не стоит "events { multi_accept on }" и используется epoll, то это
объясняется так: nginx принял одно соединение и добавил его в epoll, затем
опять вызвал epoll_wait(), он может вернуть два события: первое - новое
соединение и второе - готовность данных для первого соединения. Таким образом,
nginx получил два соединения перед sleep().
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list