34
Мониторинг. Нагрузочное тестирование. [email protected] 2009.01.19

Monitoring and Load testing

Embed Size (px)

Citation preview

Page 1: Monitoring and Load testing

Мониторинг. Нагрузочное тестирование.

[email protected]

2009.01.19

Page 2: Monitoring and Load testing

Мониторинг. Обоснование.

• Предварительные вопросы:– Сколько времени CPU потребляет Ваше

приложение?

– Сколько памяти операционной системы оно использует?

– Сколько объектов оно хранит в своём хранилище?

– Сколько пользователей в системе сейчас?

– Сколько раз вызывается тот или иной метод (а так же каково его время выполнения)?

Page 3: Monitoring and Load testing

Мониторинг. Обоснование.

• Причём, все эти показатели в разрезе времени…

Page 4: Monitoring and Load testing

Мониторинг. Обоснование.

• Если Вы не можете ответить на эти вопросы, то Вашему программному обеспечению нужны средства мониторинга.

Page 5: Monitoring and Load testing

Мониторинг. JMX.

• JMX (Java Management eXtension)

• Расширение Java машины (JVM) для предоставления средств мониторинга и управления.

• Впервые появилась как часть JRE/JDK в Java 1.5 (но можно использовать и в Java 1.4)

• Получила дальнейшее развитие в Java 6, Java 7…

Page 6: Monitoring and Load testing

Мониторинг. JMX.

• Какую информацию JMX позволяет получать?– Информацию о JMV (CPU, память, кол-во

потоков, загруженные классы, Heap/Non Heap память, сборщик мусора и пр…)

– Информацию специфичную для приложения, которое выполняется в JVM.

Page 7: Monitoring and Load testing

Мониторинг. JMX.

• Для получения представления о том, как информация, специфичная для приложения, может быть опубликована через JMX, необходим краткий экскурс в архитектуру.

Page 8: Monitoring and Load testing

Мониторинг. JMX.

Page 9: Monitoring and Load testing

Мониторинг. JConsole.

• В комплекте с JDK идёт стандартный клиент для мониторинга JMX данных – jconsole.

Page 10: Monitoring and Load testing

Мониторинг. JConsole.

Page 11: Monitoring and Load testing

Мониторинг. JConsole.

Page 12: Monitoring and Load testing

Мониторинг. JConsole.

Page 13: Monitoring and Load testing

Мониторинг. Включение JMX.

• В Java 6 локальные соединения JMX активированы по-умолчанию.

• В Java 5, для JVM необходимо передать параметр – -Dcom.sun.management.jmxremote=true

• Для активации удалённых подключений (с других машин) (в обеих версиях): – -Dcom.sun.management.jmxremote.port=???? – -Dcom.sun.management.jmxremote.authenticate=false– -Dcom.sun.management.jmxremote.ssl=false

Page 14: Monitoring and Load testing

Мониторинг. MAGNET.

• Подсистема мониторинга MAGNET.

• Кое-кто уже использует одну из подсистем платформы. Подсистему журналирования.

• Подключается просто:<dependency>

<groupId>ru.magnetosoft.magnet</groupId>

<artifactId>magnet-subsystem-management</artifactId>

<version>0.1-SNAPSHOT</version>

</dependency>

Page 15: Monitoring and Load testing

Мониторинг. MAGNET.

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

• Накапливать и хранить статистику.

• Возвращать её в запрошенные диапазоны времени.

• Кроме того, она содержит утилиты для преобразования данных в форматы, специфичные для JMX протокола (и обратно).

Page 16: Monitoring and Load testing

Нагрузочное тестирование. Обоснование.

• Симптомы необходимости внедрения нагрузочного тестирования:– Через 3 месяца система начинает

«деградировать».– При пороге в 5 одновременных

пользователей время ответа системы превышает 2 сек.

– Неожиданные ошибки конкурентного доступа.– Зависание приложение системы при

интенсивной работе.– Непонятное потребление ресурсов при

интенсивной работе или большом кол-ве пользователей.

Page 17: Monitoring and Load testing

Нагрузочное тестирование. Правило #1.

• Нагрузочное тестирование – не однократная процедура.

Page 18: Monitoring and Load testing

Нагрузочное тестирование. JMeter.

• JMeter - продукт для проведения нагрузочного тестирования.

• Особенности:– Тестирование различных видов серверов:

• Web - HTTP, HTTPS • SOAP/WS • Database via JDBC • LDAP

– Полностью портируем на все платформы (написан на Java).

– Многопоточность обеспечивает конкурентные замеры различных функций и обеспечивает эмуляцию виртуальных пользователей (VUser).

– Offline анализ результатов замеров. – Высокая конфигурируемость.

Page 19: Monitoring and Load testing

Нагрузочное тестирование. JMeter.

• На текущий момент рассмотрим возможности JMeter в области тестирования веб-сервисов.

• После (возможно в другой презентации) – тестирование веб-приложений.

Page 20: Monitoring and Load testing

Нагрузочное тестирование. JMeter.

• Основные компоненты JMeter:– Sampler – генератор запросов– Listener – анализатор результатов

выполнения запросов– Controller – контроль выполнения Sampler’ов

(циклы, условия, группы, время выполнения и прочее…)

Page 21: Monitoring and Load testing

Нагрузочное тестирование. JMeter.

Page 22: Monitoring and Load testing

Нагрузочное тестирование. Пример.

• Пример проведения нагрузочного тестирования будет продемонстрирован на модуле гетерогенного поиска (HS).

Page 23: Monitoring and Load testing

Нагрузочное тестирование. Пример.

• Создаём под-проект по отношению к основному и размещаем код (код, скрипты, шаблоны) по тестированию в нём.

Page 24: Monitoring and Load testing

Нагрузочное тестирование. Пример.

• Создаём заглушки модулей участников взаимодействия (FM, EM, Dict). Они эмулируют поведение своих реальных собратьев, но выдают псевдо-данные, которые предназначены для создания заполнения основного модуля.

• Для тех, кто не в курсе модуль HS, производит первоначальное извлечение данных из всех остальных модулей (подвергая их предварительной обработке), после чего переходит в основной режим работы. Режим выполнения сложных поисковых запросов.

Page 25: Monitoring and Load testing

Нагрузочное тестирование. Пример.

• Создаём Ant (http://ant.apache.org/) скрипт, который выполняет ВСЮ работы в автоматическом режиме.

Page 26: Monitoring and Load testing

Нагрузочное тестирование. Пример.

• Извлекает из maven репозитария все необходимые артефакты, включая заархивированные версии tomcat’а и jmeter. Это позволяет избежать предварительной настройки рабочих мест для проведения тестов.

• Распаковывает и конфигурирует извлечённые артефакты.

Page 27: Monitoring and Load testing

Нагрузочное тестирование. Пример.

• Запускает все сконфигурированные артефакты в настроенном tomcat’е (с активированной поддержкой JMX).

• Ждёт старта и окончания предварительной синхронизации модулей.

• Запускает JMeter (как ant задачу), передавая ему в качестве параметров конфигурационный файл, в котором указано, что и как тестировать, а так же куда записывать результаты и логи.

Page 28: Monitoring and Load testing

Нагрузочное тестирование. Пример.

• JMeter начинает выполнять тестовые запросы в соответствии с конфигурационным файлом (который также имеет расширение “.jmx”). Одновременно при этом он снимает показатели с JVM и записывает их в указанный лог-файл (XML формата).

Page 29: Monitoring and Load testing

Нагрузочное тестирование. Пример.

• После выполнения нагрузочных тестов сгенерированные XML файлы подвергаются специальной обработке, после которой создаются XML и HTML файлы содержащие суммарную статистику теста.

Page 30: Monitoring and Load testing

Нагрузочное тестирование. Пример.

<?xml version="1.0" encoding="UTF-8"?><jmxJvmDataStatistics>

<satistics><recordsCount>32</recordsCount><measurementStarted>2009-01-18T13:31:25.062+0300</measurementStarted><measurementFinished>2009-01-18T13:32:06.046+0300</measurementFinished><measurementTime>40984</measurementTime><jvmUptimeAtMeasurementEnd>143843</jvmUptimeAtMeasurementEnd>

</satistics><maxStateData>

<processCPUUsagePerCent>26.7159257449927</processCPUUsagePerCent><commitedVirtualMemorySize>52539392</commitedVirtualMemorySize><heapMemoryUsage>9091984</heapMemoryUsage><nonHeapMemoryUsage>23645624</nonHeapMemoryUsage><threadCount>26</threadCount><freePhysicalMemorySize>143142912</freePhysicalMemorySize><freeSwapSpaceSize>686731264</freeSwapSpaceSize>

</maxStateData><minStateData>

<processCPUUsagePerCent>0.000000944645308465716</processCPUUsagePerCent><commitedVirtualMemorySize>49008640</commitedVirtualMemorySize><heapMemoryUsage>8109448</heapMemoryUsage><nonHeapMemoryUsage>22115016</nonHeapMemoryUsage><threadCount>26</threadCount><freePhysicalMemorySize>136445952</freePhysicalMemorySize><freeSwapSpaceSize>679084032</freeSwapSpaceSize>

</minStateData><avgStateData>

<processCPUUsagePerCent>5.81998057718807</processCPUUsagePerCent><commitedVirtualMemorySize>51784704</commitedVirtualMemorySize><heapMemoryUsage>8590992</heapMemoryUsage><nonHeapMemoryUsage>23369054.25</nonHeapMemoryUsage><threadCount>26</threadCount><freePhysicalMemorySize>137923072</freePhysicalMemorySize><freeSwapSpaceSize>680529664</freeSwapSpaceSize>

</avgStateData></jmxJvmDataStatistics>

Page 31: Monitoring and Load testing

Нагрузочное тестирование. Пример.

Page 32: Monitoring and Load testing

Нагрузочное тестирование. Пример.

• После этого тот же ant скрипт запускает стандартные JUnit тесты, которые анализируют итоговые XML файлы (а могут и оригинальные) и принимают решение – прошёл тест или нет.

Page 33: Monitoring and Load testing

Нагрузочное тестирование.

• Приведённые скрипт (и его модификации для других продуктов) должен находиться в CI сервер и отслеживать: не повлияли ли внесённые изменения на требуемые показатели производительности.

Page 34: Monitoring and Load testing

Нагрузочное тестирование.

• При разработке данные скрипт (и его модификации) могут использоваться для автоматизации основных задач (конфигурирование, развёртывание).

• Запуск самого JMeter’а можно проводит в ручную. Благодаря его богатому графическому интерфейсу процесс распределения нагрузки можно проследить более визуально.