Нагрузочный тест с помощью 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

youtube.com/watch?v=7hFivbgIEqk

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

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