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

Вступление

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

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

Предпосылки

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

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

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

Установить JMeter

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

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

  • Oracle Java или OpenJDK (6 или новее)
  • Apache JMeter

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

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

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

  • Обновление Oracle Java 760, 64-бит
  • JMeter 2.11

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

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

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

JMeter GUI

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

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

Во-первых, добавьте группу потоков в план тестирования :

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

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

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

Свойства группы темы

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

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

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

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

Настройки запроса HTTP

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

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

Добавить пробоотборщик HTTP-запросов

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

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

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

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

Добавить результаты просмотра в приемнике таблицы

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

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

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

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

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

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

Таблица результатов испытаний

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

Вероятно, вы увидите, что статус всех запросов — «Успех» (обозначается зеленым треугольником с галочкой в ​​нем). После этого столбцами, которые вы, вероятно, больше всего интересуетесь, являются столбцы Sample Time (ms) и Latency (не отображаются в примере).

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

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

Таким образом, наш сервер пережил наше моделирование 50 пользователей, которые получили доступ к нашей 55-килограммовой странице WordPress за 10 секунд (5 в секунду), с приемлемым ответом. Посмотрим, что произойдет, когда мы увеличим количество потоков.

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

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

Результаты Таблица 2

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

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

top

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

Выход на холостом ходу

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

Максимальный максимальный выход процессора

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

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

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

Заключение

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

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

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *