Может кто-нибудь объяснить, что означают эти результаты ApacheBench? - PullRequest
16 голосов
/ 13 сентября 2009

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

Я ничего не изменил. Добавить новый проект. Установите обожание для 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 запросов в секунду, значит ли это, что оно обрабатывает и в среднем 421 требование в секунду?

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

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

Спасибо:)

Ответы [ 2 ]

17 голосов
/ 13 сентября 2009

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

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

Пара примеров:

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

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


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

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


Также две другие вещи:

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

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

8 голосов
/ 14 сентября 2009

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

Вам действительно нужно немного поиграть с параллелизмом, чтобы точно оценить емкость вашего сайта. До определенной степени параллелизма можно было ожидать увеличения пропускной способности, поскольку IIS параллельно обрабатывает несколько запросов. Например. если ваш сервер имеет несколько процессоров / ядер. Также, если страница зависит от внешнего ввода-вывода (служба среднего уровня или вызовы БД), процессор может работать по одному запросу, в то время как другой ожидает завершения ввода-вывода. В определенный момент количество запросов / сек будет нивелироваться с увеличением параллелизма, и вы увидите увеличение задержки. Увеличьте параллелизм еще больше, и вы увидите снижение пропускной способности (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 мс. </p>

...