Поиск по сайту:

Как использовать Apache JMeter для выполнения нагрузочного тестирования на веб-сервере


Введение

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

JMeter — это настольное Java-приложение с открытым исходным кодом, предназначенное для загрузки тестов и измерения производительности. Его можно использовать для имитации загрузки различных сценариев и вывода данных о производительности несколькими способами, включая файлы CSV и XML и графики. Поскольку это 100% Java, он доступен в каждой ОС, поддерживающей Java 6 или более позднюю версию.

Предпосылки

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

Вы можете адаптировать тесты из этого руководства к любому из ваших собственных веб-приложений. Веб-сервер, который мы тестируем в качестве примера, представляет собой VPS с 1 ЦП/512 МБ, работающий под управлением WordPress на стеке LEMP, в центре обработки данных NYC2 DigitalOcean. Компьютер JMeter работает в офисе DigitalOcean в Нью-Йорке (что связано с задержкой наших тестов).

Обратите внимание, что результаты теста JMeter могут быть искажены множеством факторов, в том числе системными ресурсами (ЦП и ОЗУ), доступными для JMeter, и сетью между JMeter и тестируемым веб-сервером. Размер нагрузки, которую JMeter может генерировать без искажения результатов, можно увеличить, запустив тесты в неграфическом режиме или распределив генерацию нагрузки на несколько серверов JMeter.

Установить JMeter

Поскольку мы используем Apache JMeter в качестве настольного приложения и используется большое количество операционных систем для настольных компьютеров, мы не будем рассматривать этапы установки JMeter для какой-либо конкретной ОС. При этом JMeter очень прост в установке. Самый простой способ установки — использовать менеджер пакетов (например, apt-get или Homebrew) или загрузить и разархивировать двоичные файлы JMeter с официального сайта и установить Java (версия 6 или более поздняя).

Вот список программного обеспечения со ссылками на архивы, необходимого для запуска JMeter:

  • OpenJDK (6 или более поздняя версия)
  • JMeter Apache

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

Кроме того, мы будем ссылаться на путь, по которому вы установили JMeter (каталог, в который вы его разархивировали), как $JMETER_HOME. Поэтому, если вы работаете в ОС на основе Linux или Unix, двоичный файл JMeter находится в $JMETER_HOME/bin/jmeter. Если вы используете Windows, вы можете запустить $JMETER_HOME/bin/jmeter.bat.

Для справки: при написании этого руководства мы использовали следующие версии программного обеспечения:

  • Обновление Oracle Java 7 60, 64-разрядная версия
  • JMeter 2.11

После того, как вы установили и запустили JMeter, давайте перейдем к созданию плана тестирования!

Создание базового плана тестирования

После запуска JMeter вы должны увидеть графический интерфейс пользователя с пустым Планом тестирования:

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

Добавить группу потоков

Сначала добавьте Группу потоков в План тестирования:

  1. Нажмите правой кнопкой мыши на План тестирования
  2. Наведите указатель мыши на Добавить >
  3. Наведите указатель мыши на треды (пользователи) >
  4. Нажмите Группа тем

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

  • Количество потоков (пользователей): количество пользователей, которых JMeter попытается смоделировать. Установите значение 50.
  • Период разгона (в секундах): продолжительность времени, в течение которого JMeter распределяет запуск потоков. Установите значение 10.
  • Счетчик циклов: количество раз выполнения теста. Оставьте это значение равным 1.

Добавить значения по умолчанию для HTTP-запроса

Элемент конфигурации HTTP Request Defaults используется для установки значений по умолчанию для HTTP-запросов в нашем плане тестирования. Это особенно полезно, если мы хотим отправить несколько HTTP-запросов на один и тот же сервер в рамках нашего теста. Теперь давайте добавим HTTP Request Defaults в Thread Group:

  1. Выберите Группа тем, затем щелкните ее правой кнопкой мыши.
  2. Наведите указатель мыши на Добавить >
  3. Наведите указатель мыши на элемент конфигурации >
  4. Нажмите Настройки HTTP-запроса по умолчанию

В разделе «Параметры HTTP-запроса по умолчанию» в разделе «Веб-сервер» введите в поле Имя или IP-адрес сервера имя или IP-адрес веб-сервера, который вы хотите протестировать. Установка сервера здесь делает его сервером по умолчанию для остальных элементов этой группы потоков.

Добавить диспетчер файлов cookie HTTP

Если ваш веб-сервер использует файлы cookie, вы можете добавить поддержку файлов cookie, добавив HTTP Cookie Manager в группу потоков:

  1. Выберите Группа тем, затем щелкните ее правой кнопкой мыши.
  2. Наведите указатель мыши на Добавить >
  3. Наведите указатель мыши на элемент конфигурации >
  4. Нажмите Диспетчер файлов cookie HTTP

Добавить сэмплер HTTP-запроса

Теперь вам нужно добавить сэмплер HTTP Request в Thread Group, который представляет запрос страницы, к которому будет обращаться каждый поток (пользователь):

  1. Выберите Группа тем, затем щелкните ее правой кнопкой мыши.
  2. Наведите указатель мыши на Добавить >
  3. Наведите указатель мыши на Сэмплер >
  4. Нажмите HTTP-запрос

В HTTP-запросе в разделе HTTP-запрос заполните Путь элементом, который вы хотите, чтобы каждый поток (пользователь) запрашивал. Мы установим это значение /, поэтому каждый поток будет получать доступ к домашней странице нашего сервера. Обратите внимание, что вам не нужно указывать сервер в этом элементе, потому что он уже указан в элементе HTTP Request Defaults.

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

Добавить результаты просмотра в Table Listener

В JMeter прослушиватели используются для вывода результатов нагрузочного теста. Доступно множество слушателей, а другие слушатели можно добавить, установив плагины. Мы будем использовать Таблицу, потому что она легко читается.

  1. Выберите Группа тем, затем щелкните ее правой кнопкой мыши.
  2. Наведите указатель мыши на Добавить >
  3. Наведите указатель мыши на Прослушиватель >
  4. Нажмите Просмотреть результаты в таблице

Вы также можете ввести значение для Имя файла, чтобы вывести результаты в файл CSV.

Запустите базовый план тестирования

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

Сначала сохраните план тестирования, нажав Файл, затем Сохранить, затем укажите желаемое имя файла. Затем выберите Просмотреть результаты в таблице на левой панели, затем нажмите Выполнить в главном меню, затем нажмите Пуск (или просто нажмите зеленую кнопку Пуск стрелку под главным меню). Вы должны увидеть результаты теста в таблице, поскольку тест выполняется следующим образом:

Интерпретация результатов

Вы, вероятно, увидите, что Статус всех запросов — «Успех» (обозначается зеленым треугольником с галочкой). ) и Задержка (не отображается в примере).

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

Согласно сгенерированной таблице диапазон времени выборки составлял 128-164 мс. Это разумное время отклика для базовой домашней страницы (около 55 КБ). Если ваш сервер веб-приложений не борется за ресурсы, как показано в примере, на время выборки будет влиять в первую очередь географическое расстояние (которое обычно увеличивает задержку) и размер запрошенного элемента (что увеличивает время передачи). Ваши личные результаты будут отличаться от примера.

Таким образом, наш сервер пережил нашу симуляцию 50 пользователей, обращающихся к нашей домашней странице WordPress размером 55 КБ в течение 10 секунд (5 каждую секунду), с приемлемым ответом. Давайте посмотрим, что произойдет, когда мы увеличим количество потоков.

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

Давайте попробуем тот же тест с 80 потоками за 10 секунд. В элементе Группа потоков на левой панели измените Количество потоков (пользователей) на 80. Теперь нажмите Просмотреть результаты в таблице, затем нажмите Начать. На нашем примере сервера это приводит к следующей таблице:

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

Войдите на свой веб-сервер через SSH и запустите top:

top

Если у вас нет пользователей, активно использующих ваш сервер, вы должны увидеть, что % использования ЦП пользователем (нас) должно быть очень низким или 0 %, а % простоя ЦП (id) должно быть 99%+, например:

Теперь в JMeter снова запустите тест, затем переключитесь обратно на сеанс SSH вашего веб-сервера. Вы должны увидеть увеличение использования ресурсов:

В нашем примере процент использования ЦП пользователем составляет 94%, а использование системы (sy) — 4,7% при 0% простоя. У нас не заканчивается память, как показано на изображении выше, поэтому снижение производительности связано с нехваткой мощности процессора! Мы также можем видеть, что процессы php5-fpm, которые обслуживают WordPress, используют большую часть ЦП (около 96% вместе взятых).

Чтобы удовлетворить требования этой симуляции 80 пользователей за 10 секунд, нам нужно либо увеличить наш ЦП, либо оптимизировать настройку нашего сервера, чтобы использовать меньше ЦП. В случае с WordPress мы могли бы переместить базу данных MySQL (которая использует часть ЦП) на другой сервер, а также реализовать кэширование (что уменьшило бы использование ЦП).

Если вам интересно, вы можете настроить количество потоков в тесте, чтобы увидеть, сколько может обрабатывать ваш сервер, прежде чем он начнет демонстрировать снижение производительности. В случае с нашим примером дроплета с 1 ЦП он работает нормально, пока мы не используем 72 потока в течение 10 секунд.

Заключение

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

Тест, который мы использовали в качестве примера, не совсем точно отражает шаблон использования обычного пользователя, но JMeter имеет инструменты для выполнения различных тестов, которые могут быть полезны в вашей собственной среде. Например, JMeter можно настроить для имитации входа пользователя в ваше приложение, кэширования на стороне клиента и обработки пользовательских сеансов с перезаписью URL-адресов. Существует множество других встроенных семплеров, прослушивателей и инструментов настройки, которые помогут вам создать желаемый сценарий. Кроме того, существуют подключаемые модули JMeter для расширения его функциональности, которые можно загрузить по адресу http://jmeter-plugins.org/.