On Mon, 4 Oct 2004, Konstantin N. Bezruchenko wrote:
> IS> Предлагаю померить conccurency, скажем, 1000 или 5000, да ещё с keep-alive.
> IS> У mathopd при большем числе keep-alive соединений появляются проблемы - он
> IS> начинает кушать процессор. Я бенчмарков никаких не делал, так как сервер
> IS> писал не для бенчмарков, а для реального использования. А реальное
> IS> использование показало следующее - на images.rambler.ru (P3-650) nginx
> IS> обрабатывает 1200r/s, держит 20,000 keep-alive соединений и кушает ~50%
> IS> процессора. До этого там стоял mathopd/1.4, которого научили kqueue и sendfile,
> IS> но он на 10,000 keep-alive соединениях ел практически весь процессор и
> IS> обрабатывал 1000r/s.
>
> Только что проверил 50000 запросов, 1000 conccurency с keep-alive
> 3 теста. Цифры средние из 3 тестов.
>
> Результаты:
> 1. nginx
> Time taken for tests: 75,836 seconds
> Requests per second: 659,34 [#/sec] (mean)
> Time per request: 1516,72 [ms] (mean)
> Time per request: 1.52 [ms] (mean, across all concurrent requests)
> Transfer rate: 4297,03 [Kbytes/sec] received
>
> 2. mathopd/1.5p3
> Time taken for tests: 65,690 seconds
> Requests per second: 761,27 [#/sec] (mean)
> Time per request: 1313,79 [ms] (mean)
> Time per request: 1.31 [ms] (mean, across all concurrent requests)
> Transfer rate: 4961,59 [Kbytes/sec] received
>
> Все-же быстрее выходит немного. Но скорее всего это я делаю что-то не
> так ;-)
>
> На счет процессора Вы правы, уже при 1000 conccurency mathopd начинает
> кушать ~65% дальше - хуже.
Да нет, скорее всего, mathopd действительно быстрее в данном тесте.
Для ускорения nginx можно попробовать следующее:
1) "worker_processes 1" - в данном тесте рабочие процессы только мешают
друг другу. Достаточно одного.
2) можно попробовать убрать "sendfile on", возможно при размере файла в 6К
он менее эффективен, чем writev(). Кстати, mathopd-1.5, насколько я
понимю, в портах собирается без sendfile.
3) сделать "connection_pool_size 4k" и "request_pool_size 8k". Памяти
будет кушать больше, но в malloc() ходить реже.
4) Убрать ненужные модули и фильтры:
--without-http_access_module
--without-http_rewrite_module
--without-http_gzip_module
--without-http_userid_module
--without-http_charset_module
5) запускать ab и сервер лучше на разных машинах.
Ну и наконец, можно потестировать с помощью deadconn:
http://www.xmailserver.org/linux-patches/deadconn_last.c
Сначала нужно запустить deadconn, скажем, с тысячей idle соединений,
а потом ab - с concurrency, скажем, 100.
Игорь Сысоев
http://sysoev.ru