2009-09-13 5 views
16

Я пытаюсь выяснить, как использовать ApacheBench и сравнить мой сайт. Я установил проект сайта по умолчанию (это ASP.NET MVC, но, пожалуйста, не ставьте стоп-чтение, если вы не являетесь человеком .NET).Может кто-нибудь объяснить, что означают эти результаты ApacheBench?

Я ничего не менял. Добавить новый проект. Задайте настройку RELEASE. Выполнить без отладки. (так что он находится в режиме LIVE). Да, это со встроенным веб-сервером, а не с классом IIS или Apache производства.

Так вот результаты: -

C:\Temp>ab -n 1000 -c 1 http://localhost:50035/ 
This is ApacheBench, Version 2.3 <$Revision: 655654 $> 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
Licensed to The Apache Software Foundation, http://www.apache.org/ 

Benchmarking localhost (be patient) 
Completed 100 requests 
Completed 200 requests 
Completed 300 requests 
Completed 400 requests 
Completed 500 requests 
Completed 600 requests 
Completed 700 requests 
Completed 800 requests 
Completed 900 requests 
Completed 1000 requests 
Finished 1000 requests 


Server Software:  ASP.NET 
Server Hostname:  localhost 
Server Port:   50035 

Document Path:  /
Document Length:  1204 bytes 

Concurrency Level:  1 
Time taken for tests: 2.371 seconds 
Complete requests:  1000 
Failed requests:  0 
Write errors:   0 
Total transferred:  1504000 bytes 
HTML transferred:  1204000 bytes 
Requests per second: 421.73 [#/sec] (mean) 
Time per request:  2.371 [ms] (mean) 
Time per request:  2.371 [ms] (mean, across all concurrent requests) 
Transfer rate:   619.41 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 0 1.1  0  16 
Processing:  0 2 5.5  0  16 
Waiting:  0 2 5.1  0  16 
Total:   0 2 5.6  0  16 

Percentage of the requests served within a certain time (ms) 
    50%  0 
    66%  0 
    75%  0 
    80%  0 
    90%  16 
    95%  16 
    98%  16 
    99%  16 
100%  16 (longest request) 

C:\Temp> 

Теперь, я точно не знаю, что я должен смотреть.

Во-первых, после количества запросов в секунду. Итак, если у нас есть требование обрабатывать 300 reqs/sec, то это говорит, что он обрабатывает и составляет в среднем 421 req в секунду?

Во-вторых, в чем причина добавления более параллельных? Как и в случае, если у меня 1000 ударов по 1 одновременно, как это отличается от 500 на 2 одновременных? Проверять, есть ли какой-либо код, который блокирует другие запросы?

Наконец, есть ли что-то важное, что я пропустил из результатов, которые я должен принять к сведению?

Спасибо :)

ответ

16

, что является причиной для добавления больше CONCURRENT? Как и в случае, если у меня 1000 ударов на 1 одновременном, как это отличается от до 500 на 2 одновременных? Является ли тест , если есть какой-либо код, который блокирует другие запросы ?

Немного о том, что да: ваше приложение, вероятно, делает вещи, где параллелизм может вызвать проблемы.

Несколько примеров:

  • страница пытается получить доступ к файлу - фиксируя его в этом процессе; это означает, что если другая страница должна получить доступ к одному и тому же файлу, ей придется подождать, пока первая страница не закончит работу с ней.
  • совсем то же самое для доступа к базе данных: если одна страница записи в базе данных, есть какая-то блокировка mecanisms (будь то табличный или рядного основе, или любой другой, в зависимости от вашей СУБД)

Тестирование с параллелизмом одного в порядке ... До тех пор, пока на вашем сайте никогда не будет более одного пользователя одновременно; что совершенно нереально, я надеюсь на вас.


Вы должны подумать о том, сколько пользователей будет находиться на месте одновременно, когда оно находится в производстве, - и отрегулируйте параллелизм; просто помните, что 5 пользователей одновременно на вашем сайте не означает, что вы должны проверить с параллелизмом 5 с аб:

  • реальных пользователей будет ждать несколько секунд между каждым запросом (время, чтобы прочитать страница, нажмите ссылку, ...)
  • ab не ждет вообще: каждый раз, когда страница загружается (т. е. запрос завершен), он запускает другой запрос!


Кроме того, две вещи:

  • аб только тесты на одной странице - реальные пользователи будут перемещаться по всему сайту, что может вызвать проблемы параллелизма вы не имели бы при тестировании только один страница
  • ab загружает только одну страницу: он не запрашивает внешние ресурсы (думаю, CSS, изображения, JS, ...); что означает, что у вас будет много других запросов, даже если они не будут дорогостоящими, когда ваш сайт будет в производстве.

Как заметка на полях: вы можете захотеть взглянуть на другие инструменты, которые могут сделать гораздо более полные тесты, как siege, Jmeter или OpenSTA: аб очень приятно, когда вы хотите измерить, если то, что вы сделали оптимизирует вашу страницу или нет; но если вы хотите имитировать «реальное» использование вашего сайта, это гораздо более адаптировано.

8

Да, если вы хотите узнать, сколько запросов в секунду ваш сайт может обслуживать, посмотрите строку «Запросы в секунду». В вашем случае это очень просто, поскольку вы запускали ab с параллелизмом 1. Каждый запрос в среднем составлял всего 2.371ms. 421 из них, один за другим, занимают 1 секунду.

Вам действительно нужно немного поиграть с параллелизмом, чтобы точно оценить емкость вашего сайта. До определенной степени параллелизма вы ожидаете увеличения пропускной способности, так как несколько запросов обрабатываются параллельно IIS. . если ваш сервер имеет несколько процессоров/ядер. Также, если страница использует внешний IO (услуга среднего уровня или вызовы БД), процессор может работать по одному запросу, а другой ожидает завершения ввода-вывода. В определенный момент запросы/сек будут выравниваться с увеличением параллелизма, и вы увидите увеличение задержки. Увеличьте параллелизм еще больше, и вы увидите, что ваша пропускная способность (req/sec) уменьшается, так как серверу приходится выделять больше ресурсов для жонглирования всех этих параллельных запросов.

Все, что сказано, большинство ваших запросов возвращаются примерно в 2 мс. Это довольно чертовски быстро, поэтому я предполагаю, что в терминах вызовов БД или среднего уровня мало что происходит, и ваша система, вероятно, максимизируется на процессоре при запуске теста (или что-то не так и происходит очень быстро. вы уверены, что ab получит страницу ответа, которую вы намереваетесь сделать? То есть вы думаете, что вы тестируете 1204 байта?). Что вызывает еще один момент: ab сам потребляет процессор тоже, особенно после того, как вы достигли параллелизма. Таким образом, вы хотите запустить ab на другой машине.

Кроме того, если ваш сайт, чтобы внешние вызовы на среднем уровне услуг или БД, вы хотите настроить machine.config оптимизировать количество потоков IIS выделяет: http://support.microsoft.com/default.aspx?scid=kb;en-us;821268

И только немного мелочи: время, потраченное статистика выполняется с шагом ~ 16 мс, так как это выглядит как гранулярность используемого таймера. То есть 80% ваших ответов не принимали 0 мс, они занимали некоторое время < 16 мс.

+0

Cheers mate :) У меня нет служб баз данных или среднего уровня. Это стандартная версия стандартного проекта ASP.NET MVC. Я просто пытаюсь понять, как работает ApacheBench, и как я могу использовать его для какого-то реального ринганга и т. Д. :) –