Тестирование нагрузки веб-сервера при помощи Apache JMeter

Данное руководство демонстрирует использование Apache JMeter для выполнения базового и стрессового тестирования нагрузки среды приложения. Руководство поможет создать план и запустить тестирование веб-сервера при помощи графического интерфейса.

JMeter – это настольное приложение Java с открытым исходным кодом, предназначенное для проведения тестирования нагрузки и измерения производительности. Оно позволяет имитировать нагрузку и предоставляет несколько способов получения данных о производительности (в том числе графики, файлы CSV и XML). Будучи полноценным приложением Java, JMeter доступен на любой ОС, поддерживающей Java 6 и выше.

Требования

Для выполнения руководства понадобится компьютер для запуска JMeter и тестирования веб-сервера.

Внимание! Не рекомендуется запускать эти тесты в среде производства: это может негативно повлиять на производительность сервера.

Данное руководство можно адаптировать для любого приложения; все примеры демонстрируются на WordPress, установленном на стек LEMP. Все программы установлены на виртуальный выделенный сервер 1 CPU / 512 MB.

Пожалуйста, обратите внимание: результаты тестирования JMeter могут быть искажены различными факторами, в том числе объёмом системных ресурсов, доступных JMeter, и самим веб-сервером. Нагрузку, которую JMeter может создать без искажения результатов, можно увеличить, запустив тестирование в неграфическом режиме или распределив нагрузку на несколько серверов JMeter.

Установка JMeter

Apache JMeter используется в качестве настольного приложения, а на сегодняшний день существует множество настольных операционных систем; к сожалению, руководство не способно охватить установку JMeter для каждой конкретной системы. К счастью, процесс установки довольно прост.

Проще всего использовать для этого менеджер пакетов (например, apt-get); можно также загрузить и разархивировать бинарные файлы JMeter с официального сайта и установить Java 6+.

Для работы JMeter необходимы следующие программы:

В зависимости от способа установки Java, вам может понадобиться указать каталог bin для Java в переменной окружения PATH, чтобы JMeter смог найти Java.

Также нужно использовать путь установки JMeter (путь к каталогу, в который был извлечён архив), задав его как $JMETER_HOME. В Linux и Unix-подобных системах бинарные файлы JMeter находятся в $JMETER_HOME/bin/jmeter; в системе Windows можно запустить $JMETER_HOME/bin/jmeter.bat.

В данном руководстве используются следующие версии программ:

  • Oracle Java 7 (64-бит);
  • JMeter 2.11

Установив JMeter, приступим к разработке плана тестирования.

Создание нагрузочного теста

Запустите JMeter. На экране появится графический интерфейс; откройте Test Plan. На данный момент не существует ни одного плана.

План тестирования являет собой последовательность компонентов, которые определяют, каким образом будет эмулироваться нагрузка. Ниже мы рассмотрим основные компоненты.

Добавление группы потоков

Для начала нужно добавить в план группу потоков (Thread Group):

  • Щелкните правой кнопкой по Test Plan
  • Выберите Add >
  • Найдите и выберите Threads (Users) >
  • Выберите Thread Group

Группы потоков имеют три особенно важных параметра, которые влияют на тестирование нагрузки:

  • Number of Threads (users): Количество потоков (пользователей), которое будет эмулировать JMeter; установите значение 50.
  • Ramp-Up Period (in seconds): Продолжительность тестирования в секундах. Установите значение 10
  • Loop Count: Количество тестов. Установите 1.

Добавление настроек HTTP

Элемент HTTP Request Defaults используется для установки стандартных значений HTTP-запросов в данном плане тестирования. Добавьте HTTP Request Defaults для Thread Group:

  • Кликните правой кнопкой на Thread Group.
  • Выберите Add.
  • Затем выберите Config Element >.
  • Кликните HTTP Request Defaults.

На экране появятся настройки для HTTP Request Defaults. В разделе Web Server найдите поле Server Name or IP и укажите в нём имя или IP-адрес веб-сервера, который нужно протестировать. Установленный здесь сервер становится сервером по умолчанию для остальных элементов этой группы потоков.

Добавление HTTP Cookie Manager

Если сервер использует cookie-файлы, можно настроить их поддержку. Для этого нужно добавить Thread Group элемент HTTP Cookie Manager:

  • Кликните правой кнопкой на Thread Group.
  • Выберите Add.
  • Затем выберите Config Element >.
  • Кликните HTTP Cookie Manager

Добавление сэмплера запросов HTTP

За настройки сэмплера запросов HTTP отвечает компонент HTTP Request, представляющий запросы к странице для каждого потока.

  • Кликните правой кнопкой на Thread Group.
  • Выберите Add.
  • Затем выберите Sampler >.
  • Кликните HTTP Request.

В появившемся окне настроек найдите раздел HTTP Request, в Path укажите объект, которому все пользователи должны отправить запрос. Установите /, чтобы все пользователи отправили запросы к домашней странице. Обратите внимание: сервер указывать не нужно, поскольку он уже указан в HTTP Request Defaults.

Примечание: Чтобы добавить в тест больше HTTP Requests, повторите инструкции данного раздела.

Настройка просмотра результатов

Для вывода результатов нагрузочного тестирования используются плагины  JMeter под названием listeners. Существует множество доступных плагинов. Используйте таблицу, поскольку её проще читать.

  • Кликните правой кнопкой на Thread Group.
  • Выберите Add.
  • Затем выберите Listener >.
  • Кликните View Results in Table.

Также можно задать Filename, чтобы направить вывод в CSV-файл.

Запуск нагрузочного тестирования

Теперь базовый план готов. Можно запустить тестирование нагрузки и просмотреть результат. Для начала сохраните план, нажав File и Save и указав имя файла. В левой панели выберите View Results in Table, затем нажмите Run и Start в главном меню (можно просто нажать зелёную стрелочку Start под главным меню). Результаты тестирования появятся на экране в виде таблицы.

Анализ результатов

Если в столбце Status появился зелёный треугольник с галочкой в нём, это значит, что все запросы выполнены успешно.

Пожалуй, наиболее важными столбцами вывода являются Sample Time и Latency.

  • Latency: Интервал времени в миллисекундах между отправкой запроса и получением ответа на него.
  • Sample Time: Интервал времени в миллисекундах, необходимый серверу на полную обработку запроса (ответ + время ожидания).

Увеличение нагрузки

Попробуйте выполнить такой же тест, увеличив количество потоков до 80 за 10 секунд. Откройте Thread Group в левой панели и измените Number of Threads (users) до 80. Затем кликните View Results in Table и Start.

В таком случае показатель Sample Time увеличится примерно на секунду, а это значит, что веб-сервер перегружен запросами. Войдите на VPS и просмотрите использование ресурсов во время нагрузочного тестирования.

Для этого используйте команду:

top

Если на данный момент сервер не посещают другие пользователи, резултат будет примерно таким:

top – 16:52:25 up 5 days, 23:18, 1 user, load average: 0.06, 0.16, 0.13
Tasks: 74 total, 1 running, 73 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 501868 total, 409232 used, 92626 free, 28132 buffres

Как видите, использование Cpu(s) us очень низкое, а id превышает 99%.

После этого снова запустите тест JMeter и вернитесь в SSH-сессию на сервере. Посл этого использование ресурсов возрастёт:

top – 16:45:57 up 5 days, 23:11, 1 user, load average: 0.80, 0.35, 0.16
Tasks: 74 total, 3 running, 71 sleeping, 0 stopped, 0 zombie
%Cpu(s): 94.7 us, 4.7 sy, 0.0 ni, 0.3 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st
KiB Mem: 501868 total, 410120 used, 91748 free, 28072 buffres
KiB Swap: 0 total, 0 used, 0 free. 240612 cached Mem

В данном примере пользователи используют 94% CPU, а система (sy) 4.7%.

В данном случае памяти хватает, а значит, причиной снижения производительности является нехватка ресурсов процессора.

Чтобы оптимизировать работу сервера для поддержки 80 пользователей за 10 секунд, нужно либо увеличить CPU, либо настроить сервер для использования меньшего количества CPU.

Попробуйте изменить количество потоков и выяснить, какое именно количество становится критичным; в данном случае сервер может без сбоев поддерживать 72 пользователя за 10 секунд.

Заключение

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

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

Tags: ,

Добавить комментарий