Мониторинг. Нагрузочное тестирование
Мониторинг. Обоснование. Предварительные вопросы: –Сколько времени CPU потребляет Ваше приложение? –Сколько памяти операционной системы оно использует? –Сколько объектов оно хранит в своём хранилище? –Сколько пользователей в системе сейчас? –Сколько раз вызывается тот или иной метод (а так же каково его время выполнения)?
Мониторинг. Обоснование. Причём, все эти показатели в разрезе времени…
Мониторинг. Обоснование. Если Вы не можете ответить на эти вопросы, то Вашему программному обеспечению нужны средства мониторинга.
Мониторинг. JMX. JMX (Java Management eXtension) Расширение Java машины (JVM) для предоставления средств мониторинга и управления. Впервые появилась как часть JRE/JDK в Java 1.5 (но можно использовать и в Java 1.4) Получила дальнейшее развитие в Java 6, Java 7…
Мониторинг. JMX. Какую информацию JMX позволяет получать? –Информацию о JMV (CPU, память, кол-во потоков, загруженные классы, Heap/Non Heap память, сборщик мусора и пр…) –Информацию специфичную для приложения, которое выполняется в JVM.
Мониторинг. JMX. Для получения представления о том, как информация, специфичная для приложения, может быть опубликована через JMX, необходим краткий экскурс в архитектуру.
Мониторинг. JMX.
Мониторинг. JConsole. В комплекте с JDK идёт стандартный клиент для мониторинга JMX данных – jconsole.
Мониторинг. JConsole.
Мониторинг. Включение 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
Мониторинг. MAGNET. Подсистема мониторинга MAGNET. Кое-кто уже использует одну из подсистем платформы. Подсистему журналирования. Подключается просто: ru.magnetosoft.magnet magnet-subsystem-management 0.1-SNAPSHOT
Мониторинг. MAGNET. Подсистема позволяет собирать статистику по состояниям системы, по действиям выполняемым в ней. Накапливать и хранить статистику. Возвращать её в запрошенные диапазоны времени. Кроме того, она содержит утилиты для преобразования данных в форматы, специфичные для JMX протокола (и обратно).
Нагрузочное тестирование. Обоснование. Симптомы необходимости внедрения нагрузочного тестирования: –Через 3 месяца система начинает «деградировать». –При пороге в 5 одновременных пользователей время ответа системы превышает 2 сек. –Неожиданные ошибки конкурентного доступа. –Зависание приложение системы при интенсивной работе. –Непонятное потребление ресурсов при интенсивной работе или большом кол-ве пользователей.
Нагрузочное тестирование. Правило #1. Нагрузочное тестирование – не однократная процедура.
Нагрузочное тестирование. JMeter. JMeter - продукт для проведения нагрузочного тестирования. Особенности: –Тестирование различных видов серверов: Web - HTTP, HTTPS SOAP/WS Database via JDBC LDAP –Полностью портируем на все платформы (написан на Java). –Многопоточность обеспечивает конкурентные замеры различных функций и обеспечивает эмуляцию виртуальных пользователей (VUser). –Offline анализ результатов замеров. –Высокая конфигурируемость.
Нагрузочное тестирование. JMeter. На текущий момент рассмотрим возможности JMeter в области тестирования веб-сервисов. После (возможно в другой презентации) – тестирование веб-приложений.
Нагрузочное тестирование. JMeter. Основные компоненты JMeter: –Sampler – генератор запросов –Listener – анализатор результатов выполнения запросов –Controller – контроль выполнения Samplerов (циклы, условия, группы, время выполнения и прочее…)
Нагрузочное тестирование. JMeter.
Нагрузочное тестирование. Пример. Пример проведения нагрузочного тестирования будет продемонстрирован на модуле гетерогенного поиска (HS).
Нагрузочное тестирование. Пример. Создаём под-проект по отношению к основному и размещаем код (код, скрипты, шаблоны) по тестированию в нём.
Нагрузочное тестирование. Пример. Создаём заглушки модулей участников взаимодействия (FM, EM, Dict). Они эмулируют поведение своих реальных собратьев, но выдают псевдо-данные, которые предназначены для создания заполнения основного модуля. Для тех, кто не в курсе модуль HS, производит первоначальное извлечение данных из всех остальных модулей (подвергая их предварительной обработке), после чего переходит в основной режим работы. Режим выполнения сложных поисковых запросов.
Нагрузочное тестирование. Пример. Создаём Ant ( скрипт, который выполняет ВСЮ работы в автоматическом режиме.
Нагрузочное тестирование. Пример. Извлекает из maven репозитария все необходимые артефакты, включая заархивированные версии tomcatа и jmeter. Это позволяет избежать предварительной настройки рабочих мест для проведения тестов. Распаковывает и конфигурирует извлечённые артефакты.
Нагрузочное тестирование. Пример. Запускает все сконфигурированные артефакты в настроенном tomcatе (с активированной поддержкой JMX). Ждёт старта и окончания предварительной синхронизации модулей. Запускает JMeter (как ant задачу), передавая ему в качестве параметров конфигурационный файл, в котором указано, что и как тестировать, а так же куда записывать результаты и логи.
Нагрузочное тестирование. Пример. JMeter начинает выполнять тестовые запросы в соответствии с конфигурационным файлом (который также имеет расширение.jmx). Одновременно при этом он снимает показатели с JVM и записывает их в указанный лог-файл (XML формата).
Нагрузочное тестирование. Пример. После выполнения нагрузочных тестов сгенерированные XML файлы подвергаются специальной обработке, после которой создаются XML и HTML файлы содержащие суммарную статистику теста.
Нагрузочное тестирование. Пример T13:31: T13:32:
Нагрузочное тестирование. Пример.
После этого тот же ant скрипт запускает стандартные JUnit тесты, которые анализируют итоговые XML файлы (а могут и оригинальные) и принимают решение – прошёл тест или нет.
Нагрузочное тестирование. Приведённые скрипт (и его модификации для других продуктов) должен находиться в CI сервер и отслеживать: не повлияли ли внесённые изменения на требуемые показатели производительности.
Нагрузочное тестирование. При разработке данные скрипт (и его модификации) могут использоваться для автоматизации основных задач (конфигурирование, развёртывание). Запуск самого JMeterа можно проводит в ручную. Благодаря его богатому графическому интерфейсу процесс распределения нагрузки можно проследить более визуально.