Всем привет.
Предпосылки:
При проведение нагрузки в несколько потоков была замечена
деградация производительности в секунду при превышение какого-то условного
числа потоков. До этого момента производительность росла, после начала падать.
Посмотрев что в конечном итоге при равном количестве совершенных запросов с
ростом количества потоков время на проведения самого тестирования стало возрастать
я предположил, что дело не в сервисе, а в моей рабочей машине на базе которой я
и проводил все серии нагрузки.
Решение провести нагрузку в несколько потоков с нескольких
машин.
Задача:
Необходимо провести нагрузочное тестирование в несколько
потоков с нескольких машин. Собрать результаты и проанализировать.
Что есть под рукой:
Есть свой компьютер и несколько рабочих станций сотрудников
в отделе.
Немного общей теории:
И так подготовительные действия:
- На системах, которые будем настраивать брандмауэр должен быть отключен (или правильно настроен. Правильную настройку брандмауэра в рамках данного поста рассматривать не буду).
- Все клиенты JMeter должны быть в рамках одной подсяти (можно в разных, но тут опять сложнее, у меня все в одной были).
- Сервер должен быть в сети с «серым» адресом (192.168.ххх.ххх или 10.ххх.ххх.ххх) если не в рамках серой сети, могут возникнут какие-то сложности ( не сталкивался)
- Убедитесь, что JMeter имеет доступ к серверу нагрузки.
- Убедитесь, что вы используете ту же версию JMeter на всех системах. Если версии ( к примеру отличаются расширениями) различны могут возникнуть проблемы с выполнением тестов.
Терминология:
Прежде чем далее рассказывать все по шагам определимся с
терминологией
Master – это система, на которой запущен JMeter GUI , которая контролирует
прохождение всего теста.
Slave – это система на которой запущен jmeter-server, принимает
команды от графической оболочки (от Master) и посылает запросы к целевой
системе (target)
Target – это целевая система. Которую мы планируем
протестировать под нагрузкой.
Последовательность действий
- Подготавливаем себе исходный материал. Считаем что сам тест-план у нас уже есть. Нам понадобиться архив с самим JMeter и на всякий случай JRE. По скольку я не стал долго выяснять есть ли на моих «подопытных» нужный мне софт я сразу себе собрал zip со своей же папки JMeter ( так я обеспечил условие одинаковости версий, ибо у меня все хранится прямо в самой папке, более того сам тест-план гарантированно использовал рукописные классы) и установщик JRE, так что бы везде было все одинаково. Установщик скачал с официального сайта (https://java.com/ru/download/).
- Скопировал подготовленные файлы на Slave машины.
- Произвел настройку:
- Установил JRE ( в некоторых случаях переустановил на более новую версию в некоторых установка была первой)
- Распаковал архив с JMeter в папку с простым путем ( к примеру вот сюда D:\jmeter\)
- Настроил следующие параметры окружения:
- JEMETER_HOME = <папка распаковки архива>
- JMETER_BIN = %JMETER_HOME%\bin\
- JAVA_HOME = <папка установки java>
- Path = %JAVA_HOME%\bin;%JMETER_HOME%\bin;<то что там было до этого>
- Проверил правильность настройки окружения в командной строке вбив две команды: where java ; where jmeter. Должно было получиться два вот таких ответа:
- Далее стартуем на Slave jmeter-server.bat . Проблемы если на компьютере несколько сетевых интерфейсов то может получиться так что по умолчанию jmeter-server запустится не на том IP-адресе. Как решить данную проблему? Через соответствующую строку запуска вот такую. Тут важно соблюдать все, включая пробелы:
- jmeter-server –Djava.rmi.server.hostname=<требуемый ip>
- На этом настройка Slave заканчивается далее приступаем к настройки Maste
- Настройка Master:
- Для этого надо в параметрах jmeter явно указать
адреса всех Slave-машин. Идем в папку %JMETER_BIN%
и открываем на редактирование jemeter.properties
и меняем параметр remote_hosts. В нем через запятую перечисляем все наши Ip адреса. - После запускам jmeter и открываем нужный нам тест-план.
- В меню у нас появляется вот такие штуки
В общем-то и все. Теперь несколько "важностей" для правильной
настройки самого тест-плана. Все эти рекомендации доступны в выше приведенных
источниках и в официальном описание продукта:
- Четко помните, что каждый сервер будет выполнять не часть тестового плана, а весь тестовый план. К примеру, если у вас указано запустить 100 потоков, то каждый из серверов запустить 100 потоков.
- Распределенное тестирование требует передачи большого объема данных, поэтому лучше всего будет собрать результаты тестирования просто в файл, а потом уже строить графики и проводить прочий анализ. По этой причине настраивайте план так, что бы все писалось именно в файл (как это сделать я сейчас не расскажу).
На этом пока все. Приведенная выше инструкция не претендует
на полноту и неоспоримость. Это описание того как я решил возникшую передо мной
проблему.
Комментариев нет:
Отправить комментарий