Нагрузочный тест с помощью Apache JMeter

Разработчики нередко пренебрегают нагрузочным тестированием веб-приложений и сайтов. Что в итоге приводит к тому, что выставленный в Интернете проект падает в течение первых же дней. Здесь не последнюю роль играет слава нагрузочного тестирования как очень сложного и трудоемкого процесса. Но не так страшен черт как его малюют.

Ведь даже среди онлайн-сервисов несложно найти предложение провести эдакое мини-тестирование нагрузки для вашего сайта, не отходя от кассы. А можно и самостоятельно провести легкий нагрузочный тест, используя Apache JMeter.

Мы будем описывать такой подход как Log Replay. Он имеет свои ограничения: его хорошо использовать для сайтов, но не для тех веб-приложений, где задействован POST. Кроме того, наш метод игнорирует существование сессий cookie-based. В наш арсенал также необходимо добавить установленную Жабу. Отыскать ее можно в разделе Access log, либо же генерируем текстовый файл, используя URL-список, например, с помощью Xenu, в итоге получаем нечто такое:

http://test.local/index.php
http://test.local/news/event-12.php
...
Заменяем «http://test.local» на ловкое «"GET », обязательно ставим и кавычку, и пробел.

"GET /index.php
"GET /news/event-12.php
...
Здесь кавычек в конце строки не ставим.

Скачав JMeter и развернув архив, мы в директории bin должны запустить jmeter.bat, если работаем с виндой. Пауза, затем запускается обычный GUI и создается дерево из целых 2 узлов, Workbench и TestPlan. И если первый нас не интересует, то на второй кликаем правой кнопкой и выбираем Add, а затем Thread Group. В результате добавляется группа потоков, где мы пока ничего менять не собираемся. Сценарий выполняется один раз, одним-единственным виртуальным пользователем. Переименовывать пока тоже ничего не нужно.

Дальше нужно добавить правым кликом Access Log Sampler (а именно, Thread Group, затем Add, потом Sampler, и наконец, Access Log Sampler) и выбрать серверу адрес и обязательно локальный путь к логу доступа.

Не забываем о средствах отображения:

Thread Group->Add->Listener->View Results in Table
Thread Group->Add->Listener->Graph Results
Thread Group->Add->Listener->Aggregate Report
Не пропускаем поле Filename, во вкладке View Results in Table, необходимо указать путь, лог-файл нам понадобится для отладки.

Итак, переходим непосредственно к тестированию. Обязательно сейвимся каждый раз после любых изменений в тест-плане, так как имеем высокие шансы подвиснуть.

Run->Clear All (при повторе) и Run->Start
Вкладка View Results in Table выдает результаты. Если видим там одну-единственную строчку, да еще с зелененькой галочкой в статусе, то все прошло отлично, а если нет – то увидим в статусе ошибку. Тогда почитаем TestPlan.log, авось догадаемся, что пошло не так. Например, вот это витиеватое выражение будет означать, что сервер не ответил:

rc="Non HTTP response code: java.net.ConnectException"
rm="Non HTTP response message: Connection refused: connect".
А вот

rc="Non HTTP response code: java.net.ProtocolException"
rm="Non HTTP response message: Invalid HTTP method: null"
- так это строка access-лога, видать, выпендрилась и распарсилась неправильно.

Если все прошло нормально, или вы же разобрались в неполадках, то самое время зайти в Thread Group на вкладку свойств и поставить Loop Count: Forever. Сохраняемся и стартуем опять.

Во View Results in Table можно увидеть ошибку в последней строке, но если она одна, то все в порядке, это просто говорит о конечности вашего файла, что всегда почему-то повергает Jmeter в глубокую печаль. Access-логи лучше будем брать размером побольше, дабы не искажать результаты вредной привычкой этой программы останавливать сценарий после окончания файла, несмотря на просьбы так не делать. Увеличить логи можно, поставив в командной строке сору, или же воспользовавшись копированием в текстовом редакторе.

Следует также добавить случайную задержку в начало самого сценария, Uniform Random Timer от 0 до 1000 миллисекунд. Это мы делаем для красоты графиков, таким образом его можно немного сгладить.

Для первого теста поставим в свойствах группы потоков: Number of Threads (users): 100, Ramp-Up Period (in seconds): 100. Так мы смоделируем посещение 100 пользователей в течение 100 секунд. Мы, к слову, этой проверкой рискуем завалить сайт совершенно самостоятельно, без помощи реальных посетителей. Поэтому чем раньше мы проведем нагрузочный тест, тем лучше.

Итак, начинаем:

File->Save, Run->Clear All, Run->Start.
Результаты видим в Graph Results.

Правый верхний угол сообщает о текущем количестве виртуальных пользователей. Если видно по графику, что сайт уже не справляется с наплывом посетителей, то мы останавливаем процесс, дабы не положить его окончательно: Run->Stop. Поэтому лучше во время выполнения проверки далеко и надолго не отлучаться.

Нашим результатом будет максимальное значение графы Throughput - количество запросов в минуту. Уже есть на что ориентироваться. А график же времени отклика может показать так называемую полочку, скорее всего в начале. Это значит, что начальные изменения нагрузки никак не сказывались на производительности сайта, он работал вполне в комфортных условиях. Соответственно, чем больше полочка, тем выше надежность сайта. Можно изучить данный диапазон более детально. Изменяем данные Number of Threads и Ramp-Up Period и смотрим, когда же сайт начнет испытывать трудности.

Можно также провести тестирование статической нагрузкой. Например, задаем Number of Threads = 3, Ramp-Up Period = 0 и наблюдаем результат.

Неплохо было бы заглянуть и в Aggregate Report в поисках статистики по URL-ам, особенно в колонку Average - это среднее время одного отклика.

Интерпретировать и использовать все полученный данные будет уже несложно.

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

Но зато простоты и удобства в использовании у Apache JMeter не отнимешь.

Оцени публикацию:
  • 0,0
Оценили человек: 0

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

Новые заметки:

Про что мы забываем когда делаем оценку задачи по времени

Список вопросов для собеседования разработчика по телефону

Symfony2 авторизация без Doctrine2 для чайника

Phpstorm7 LiveEdit

Жесткий хабр или не хабр, тогда кто?

Яндекс.Деньги мошенничество

Как узнать какие страницы в поиске яндекса или это секрет

Последние комменты:

Yapro CMS:

Здравствуйте, Гость | Войти | Регистрация | Карта сайта | RSS ленты | Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2018 YaPro.Ru

Главная » Веб-мастеру » PHP »