Разные результаты в ApacheBench с одновременными запросами и без них

Я пытаюсь получить статистику по времени отклика на моем рабочем сервере.

При вызове ab -n100 -c1 "http://example.com/search?q=something" я получаю следующие результаты:

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       24   25   0.7     24      29
Processing:   526  874 116.1    868    1263
Waiting:      313  608 105.1    596    1032
Total:        552  898 116.1    892    1288

Но когда я вызываю ab -n100 -c3 "http://example.com/search?q=something", результаты намного хуже:

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       24   25   0.8     25      30
Processing:   898 1872 1065.6   1689    8114
Waiting:      654 1410 765.5   1299    7821
Total:        923 1897 1065.5   1714    8138

Принимая во внимание, что сайт находится в разработке, а значит есть запросы помимо моего, я не могу объяснить, почему звонки без параллелизма намного быстрее, чем даже с небольшим параллелизмом.

Какие-либо предложения?


person glaz666    schedule 06.06.2012    source источник


Ответы (1)


Если у вас есть параллелизм 1, это означает, что вы говорите AB перейти по этому URL-адресу так быстро, как это возможно, используя один поток. Значение -c3 говорит AB делать то же самое, но с использованием 3 потоков, что, вероятно, приведет к увеличению количества вызовов, что в вашем случае, по-видимому, привело к замедлению работы. (Обратите внимание, что AB является однопоточным, поэтому на самом деле не использует несколько потоков ОС, но аналогия все еще верна.)

Это немного похоже на наличие большего количества полос в пункте взимания платы: одна полоса может обрабатывать автомобили только очень быстро, но с тремя полосами вы получите большую пропускную способность. Но независимо от того, сколько у вас полос в ширину туннеля, через который автомобили должны проехать после взимания платы, это также повлияет на пропускную способность, что, вероятно, вы и видите.

В качестве общего замечания, лучший подход к нагрузочному тестированию – решить, какой уровень трафика должен поддерживать ваше приложение, а затем разработать тест, обеспечивающий этот уровень пропускной способности и не более того. Запуск потоков так быстро, как они могут, как это делает AB, как правило, затрудняет любое контролируемое тестирование. JMeter лучше.

Кроме того, вы можете подумать о настройке тестового сервера для таких вещей, менее рискованно...

person Oliver Lloyd    schedule 06.06.2012