Тестировал кучей всевозможных способов, и наблюдаю одинаковую ситуацию
При увеличении количества одновременных запросов в 10 раз, соответственно увеличивается и время ответа
Среднее количество запросов в секунду при этом остается примерно одинаковым, и никакой процесс не упирается в CPU/Memory
Мне непонятно, в какое другое ограничение я уперся в таком тесте:
- в ограничение веб-сервера(для Ngnix это должны быть детские игры) ?
- в ограничение тестирующего кода(мне кажется ab также должен хорошо справлятся) ?
- в ограничение ОС (количество соединений, etc...) ?
Например тестировал не настроенный Nginx(под Windows 7) с помощью apache benchmark на 10/100/1000 одновременных запросов, на 10000 запросов в 1 КБ
Вот сводные данные
"Time per request" растет каждый раз на порядок
"Requests per second" первые два раза одинаков, на третий падает в два раза
Concurrency Level: 10 100 100
Requests per second: 885.61 878.22 390.39
Time per request: 11.292 113.867 2561.546
Такая же ситуация наблюдается, если:
- тестировать nginx, либо простейший Node.js сервер с cluster-ом
- тестировать с помощью ab, либо Node.js-скриптом(модуль http, либо request)
- тестировать на windows, либо на debian
- проделал это в куче разных вариаций(веб-сервер и тестирующая утилита на одном компьютере)
везде время запроса растет пропорционально количеству потоков
Вот более подробные логи ab:
Concurrency Level: 10
Time taken for tests: 11.292 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 12570000 bytes
HTML transferred: 10240000 bytes
Requests per second: 885.61 [#/sec] (mean)
Time per request: 11.292 [ms] (mean)
Time per request: 1.129 [ms] (mean, across all concurrent requests)
Transfer rate: 1087.12 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.6 1 4
Processing: 5 10 3.1 10 184
Waiting: 4 9 3.2 9 181
Total: 6 11 3.1 11 184
Concurrency Level: 100
Time taken for tests: 11.387 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 12570000 bytes
HTML transferred: 10240000 bytes
Requests per second: 878.22 [#/sec] (mean)
Time per request: 113.867 [ms] (mean)
Time per request: 1.139 [ms] (mean, across all concurrent requests)
Transfer rate: 1078.05 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.9 1 15
Processing: 14 112 15.2 111 363
Waiting: 12 94 25.4 100 363
Total: 14 113 15.2 112 364
Concurrency Level: 1000
Time taken for tests: 25.615 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 12570000 bytes
HTML transferred: 10240000 bytes
Requests per second: 390.39 [#/sec] (mean)
Time per request: 2561.546 [ms] (mean)
Time per request: 2.562 [ms] (mean, across all concurrent requests)
Transfer rate: 479.22 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 23.1 1 514
Processing: 520 2471 749.2 2747 3931
Waiting: 478 2408 735.6 2668 3659
Total: 521 2473 749.6 2748 3932