О чём говорит apache benchmark

3 ноября 2010 г.

Когда я первый раз столкнулся с задачей оптимизации скорости работы сайта, я начал рыскать по просторам интернета, чтобы получить хоть какое-то представление о том, как эта самая оптимизация делается. Именно тогда я в первый раз услышал об утилите “apache benchmark“, которая как сказано в описании официального сайта apache «главным образом показывает, как много запросов способен выполнить ваш сервер».

Прочитав документацию, я решил опробовать утилиту в действии, а в качестве подопытного использовать сайт самих разработчиков apache. После того как я прописал в консоль “ab -c10 -n100 httpd.apache.org/“, мне сообщили что «httpd.apache.org» бенчмаркетится (benchmarkering), что если верить словарю переводится как «тестируется». Также мне посоветовали быть терпеливым, что я собственно и сделал. Спустя некоторое время, утилита выдала информацию о результатах своего труда. Должен признать, что увидев данную таблицу впервые, я не понял ровным счетом ничего, и вынести для себя какую-то полезную информацию было достаточно тяжело. Потратив некоторое время я, конечно, во всем разобрался, и сейчас хочу поделиться тем, как я понимаю то, о чем нам говорит “apache benchmark“.

Итак, результаты тестирования были следующими:

Server Port: 80 — при тестировании использовался 80-й порт.

Document Path: / — путь к документу. В нашем случае — основная директория.

Document Length: 13666 bytes — размер документа — 13,6Кб. Причем, это размер не учитывающий встроенные элементы, например, изображения. Сохранив страницу на локальный компьютер, можно увидеть, что на странице размещены два изображения общим размером 18Кб, а вот сам html файл страницы весит приблизительно 14Кб.

Concurrency Level: 10 — если перевести, то это будет звучать как «уровень параллелизма». О чем-нибудь говорит? Когда я увидел это впервые, мне это не говорило ни о чём. Немного поразмыслив, я предположил, что это количество одновременных запросов, которое выполнял сервер в процессе тестирования. Проделав еще несколько тестов, изменяя опцию “-cN”, я понял что оказался прав.

Time taken for tests: 28.252 seconds — тестирование выполнялось в течении 28-и с лишним секунд.

Complete requests: 100 — было выполнено 100 запросов.

Failed requests: 0 — неудачно выполненных запросов было 0.

Write errors: 0 — ошибок в журнал записано не было.

Total transferred: 1404503 bytes — общее количество информации, которое было получено от сайта httpd.apache.org.

HTML transferred: 1372882 bytes — похоже, что сюда не включены изображения, флеш-анимации и прочее. Если мы поделим «HTML transferred» на «Document Length», то получим 100 с копейками, что соответствует значению выполненных запросов «Complete requests».

Requests per second: 3.54 [#/sec] (mean) — количество запросов за секунду. Это среднее значение — результат деления «Complete requests» на «Time taken for tests».

Time per request: 2825.237 [ms] (mean) — время, в течении которого выполнялись 10 параллельных запросов.

Time per request: 282.524 [ms] (mean, across all concurrent requests) — время, в течении которого выполнялся один запрос. То есть значение «Time per request», разделённое на «Concurrency Level».

Transfer rate: 48.55 [Kbytes/sec] received — скорость, с которой apache benchmark получал информацию с тестируемого сервера.

Connection Times (ms) — таблица со временем соединения в миллисекундах. Здесь мы имеем таблицу с четырьмя строчками и четырьмя столбцами:

  • Строка Connect: — время, которое потратила утилита на соединение с сервером.
  • Строка Processing: — время выполнения запроса.
  • Строка Waiting: — время простоя запроса. То есть время, которое запрос ждал своей очереди для выполнения.
  • Строка Total: — общее время по строкам.
  • Столбец min — минимальное время.
  • Столбец mean[±sd] — по этому столбцу, к сожалению, информации не имею. Если, у кого-то есть сведения по нему, пожалуйста, поделитесь.
  • Cтолбец median — среднее время.
  • Стобец max — максимальное время.

Исходя из результатов тестирования видно, что самый быстрый запрос был выполнен за 1.194 секунды, а самый медленный за 10.614 секунд.

Percentage of the requests served within a certain time (ms) — доля запросов, выполненных в определенное время. То есть 80 процентов всех запросов выполнились в течении 2-х с небольшим секунд. А самый долгий запрос выполнялся 10 с лишним секунд.

Итоги: На мой взгляд особого внимания заслуживают: Requests per second, а также min и max значения таблицы Connection Times (ms). Опираясь на эти данные, мы можем сказать, что сайт «httpd.apache.org» при нагрузке в 10 одновременно зашедших на сайт посетителей, загрузит страницу в лучшем случае за 1.194 секунды, в худшем за 10.614 секунд. Конечно, для полной оценки работы сервера нужно проводить несколько тестов, изменяя опции “-cN” и “-nN”. Таким образом можно увидеть, как изменяются показатели сервера в зависимости от нагрузки.

  • Похожие статьи
  • Предыдущие из рубрики