Под предельной нагрузкойСергей «grinder» Яремчук (grinder@ua.fm, www.tux.in.ua) Хакер, номер #111, стр. 111-154-1 Обзор программ нагрузочного тестирования веб-серверовСдавая веб-сервер в повседневную эксплуатацию, нужно быть уверенным, что он выдержит планируемую нагрузку. Только создав условия, приближенные к боевым, можно оценить, достаточна ли мощность системы, правильно ли настроены приложения, участвующие в создании веб-контента, и прочие факторы, влияющие на работу веб-сервера. В этой ситуации на помощь придут специальные инструменты, которые могут дать качественную и количественную оценку работы как веб-узла в целом, так и отдельных его компонентов. Все идет по плануВначале следует разобраться, что мы хотим получить в результате тестирования. Ведь проверка, как и любая другая работа, требует предварительной подготовки. При неправильно сформулированной задаче могут получиться результаты, не полностью отражающие реальное положение дел. Исходя из предполагаемой нагрузки веб-сервера, необходимо определиться с критериями испытания и установить, что будет считаться успехом, а что – неприемлемой работой сервиса (например, время ответа, загрузка сервера). Различают три варианта теста:
Соответственно, результат теста – максимальное число пользователей, которые могут одновременно получить доступ к веб-узлу, число запросов, обрабатываемых приложением, или время ответа сервера. Основываясь на полученном результате, веб-мастер и сетевой администратор смогут заранее выявить узкие места, возникающие из-за несбалансированной работы компонентов (в работе сервера участвуют и другие компоненты сети, маршрутизаторы, брандмауэр, кэширующий и прокси-сервер, база данных и пр.), и исправить ситуацию, перед тем как включать систему в реальную работу. Во время тестирования имитируется одновременная работа нескольких сотен или тысяч посетителей. Для большей правдивости каждый из виртуальных пользователей может «ходить» по сайту по индивидуальному сценарию и иметь личные параметры. Также в процессе тестирования можно имитировать кратковременные пики нагрузки, когда количество посетителей скачкообразно увеличивается, что очень актуально для сайтов с неравномерной аудиторией. Итак, чтобы полноценно провести тестирование, необходимо знать:
Любой из этих параметров может повлиять на конечный результат. Необязательно все проверки включать в один тест, можно разбить задачу на несколько подзадач. Например, проверка базовой системы (серверы: веб, приложений, базы данных) и проверка отдельных модулей (сервлеты, скрипты и пр., например, проверка аутентификации при большом количестве пользователей). В результате при тестировании выдаются графики трех видов: линейный, нелинейный и насыщения. В первом случае при возрастании нагрузки время отклика (то есть обработки) остается постоянным. При дальнейшем увеличении нагрузки время отклика также увеличивается (почти линейно), и, наконец, наступает ситуация, подобная DOS-атаке, когда время отклика бесконечно увеличивается. Теперь, когда план действий готов, переходим к краткому обзору утилит, которые помогут его воплотить. Начнем с бесплатных. Open Systems Testing ArchitectureOpenSTA (www.opensta.org) – больше чем приложение для тестов, это открытая архитектура, проектируемая вокруг открытых стандартов. Проект создан в 2001 году группой компаний CYRANO, которая поддерживала коммерческую версию продукта, но CYRANO распался, и сейчас OpenSTA распространяется как приложение с открытым кодом под лицензией GNU GPL. Работает в Windows NT 4.0SP5/2000/XP. Для работы требует Microsoft Data Access Components (MDAC), который можно скачать сайта корпорации. Текущий инструментарий позволяет провести нагрузочное испытание HTTP/HTTPS сервисов, хотя его архитектура способна на большее. OpenSTA позволяет создавать тестовые сценарии на специализированном языке SCL (Script Control Language). Для упрощения создания и редактирования сценариев используется специальный инструмент Script Modeler. Выбираем Tools – Canonicalize URL, после чего запустится веб-браузер. Просто ходим по сайту, собирая ссылки, которые будут сохранены в скрипт. Все параметры запроса поддаются редактированию, возможна подстановка переменных. Структура теста и заголовки будут выводиться во вкладках в панели слева. Тесты удобно объединять в наборы. Настройки прокси задаются в самом скрипте, поэтому можно указать несколько серверов. Реализована возможность организации распределенного тестирования, что повышает реалистичность и пригодится, когда с одного компьютера не получается нагрузить мощный сервер. Каждая из машин такой системы может выполнять свою группу заданий, а repository host осуществляет сбор и хранение результатов. После установки на каждой тестирующей системе запускается сервер имен (работа которого обязательна). Поддерживается аутентификация пользователей на веб-ресурсе и установление соединений по протоколу SSL. Параметры работы нагружаемой системы можно контролировать с помощью SNMP и средств Windows NT. Результаты тестирования, включающие время откликов, количество переданных байт в секунду, коды ответа для каждого запроса и количество ошибок, выводятся в виде таблиц и графиков. Использование большого числа фильтров позволяет отобрать необходимые результаты. Результат можно экспортировать в CSV-файл. Возможности по выводу отчетов несколько ограничены, но по ссылкам на сайте можно найти скрипты и плагины, упрощающие, в том числе, анализ полученной информации. Apache JMeterApache JMeter (jakarta.apache.org/jmeter) является Java-приложением с открытым кодом и предназначен для нагрузочного тестирования не только веб-приложений и их отдельных компонентов (скрипты, сервлеты, Java объекты и др.), но также FTP-серверов, баз данных (с использованием JDBC) и сети. Функциональность расширяется с помощью плагинов. Поддерживается SSL (через Java Secure Sockets Extension). Возможно проведение тестов как с использованием графического интерфейса, так и из командной строки. Использование Java подразумевает кроссплатформенность, поэтому JMeter уверенно работает в различных *nix-системах, в Windows, начиная от 98, и некоторых других ОС. Распространяется под Apache License. В JMeter предусмотрены механизмы авторизации виртуальных пользователей, поддерживаются пользовательские сеансы, шаблоны, кэширование и последующий offline анализ результатов теста, функции позволяют сформировать следующий запрос, основываясь на ответе сервера на предыдущий. Есть возможность проводить распределенные тесты. В этом случае один из компьютеров является сервером (bin/jmeter-server.bat), который управляет клиентами и собирает итоговую информацию. Для работы достаточно запустить ApacheJMeter.jar или в консоли jmeter.bat (Windows), или jmeter.sh (*nix). JMeter имеет встроенный прокси-сервер, который предназначен для записи сессий, но можно использовать и внешний. Перед началом тестирования необходимо составить тестовый план, описывающий серию заданий, которые необходимо выполнить JMeter. Он должен содержать одну или несколько групп потоков (Thread Groups) и следующие элементы:
Первым делом добавляем группу потоков (Edit - Add - Thread Group). В ее настройках указываем название, количество запускаемых потоков, то есть виртуальных пользователей (Number of threads), время задержки между запуском потоков (Ramp-Up Period), количество циклов выполнения задания (Loop Count). Здесь же можно определить выполнение задания по расписанию (Sheduler). Далее, щелкая в созданную группу, необходимо добавить образец запроса (Sampler), выбрав его из списка. Для нагрузочного тестирования или проверки работоспособности сервера достаточно выбрать HTTP Request (Add -Sampler - HTTP Request). Тут указываем название, IP-адрес и порт веб-сервера, протокол, метод передачи данных (GET, POST), параметры переадресации, передачу файлов на сервер. Настраиваем и жмем на Run. Вывод результата осуществляется с помощью Listeners, каждый по-своему выводит результат. Например, Aggregate Graph выводит суммарные результаты теста в виде таблицы и графика. Бесплатные продукты, увы, закончились, теперь парочка коммерческих решений. WAPT – Web Application TestingWAPT (www.loadtestingtool.com) позволяет испытать устойчивость веб-сайта и других приложений, использующих веб-интерфейс, к реальным нагрузкам. Разрабатывается новосибирской компанией SoftLogica LLC. Это одна из самых простых в использовании программ обзора. Для проведения несложного теста даже не нужно заглядывать в документацию, интерфейс прост, хотя и не локализован. Работает под управлением Windows от 98, поддерживается и Vista. Для проверки WAPT может создавать множество виртуальных пользователей, каждый из которых обладает индивидуальными параметрами. Поддерживается несколько видов аутентификации и куки. Сценарий позволяет изменять задержки между запросами и динамически генерировать некоторые испытательные параметры, максимально имитируя поведение реальных пользователей. В запрос могут быть подставлены различные варианты HTTP-заголовка, а в настройках можно указать кодировку страниц. Параметры User-Agent, X-Forwarded-For, IP указываются в настройках сценария. Значения параметров запроса могут быть рассчитаны несколькими способами, в том числе, используя переменные и функции, определены ответом сервера на предыдущий запрос. Поддерживается работа по защищенному протоколу HTTPS (и все типы прокси-серверов). Созданные сценарии, сохраняемые в файле XML-формата, можно использовать повторно. Кроме стандартных Performance и Stress, в списке присутствуют несколько других тестов, позволяющих определить максимальное количество пользователей и тестировать сервер под нагрузкой в течение долгого периода. Для проведения теста необходимо выбрать New – Scenario, в результате запустится мастер создания теста. Сначала указывается тип теста и далее в каждом окне заполняются его параметры. Здесь можно указать либо фиксированное количество виртуальных пользователей, либо ступенчатое увеличение с указанием минимального и максимального числа и временного интервала, выставить таймер проведения теста. Затем задается время между кликами (think time), скорость соединения и указывается диапазон IP-адресов, который будет использован виртуальными пользователями. Нажатие на IP Adress List позволит составить список таких адресов. Также выставляется HTTP-параметр User-Agent и включается эмуляция прокси. Если требуется, чтобы виртуальные пользователи имели индивидуальные настройки, на следующем шаге мастера для каждого из них необходимо создать свой профиль, нажав New или загрузив сохраненный. В следующем окне программы необходимо выставить параметры профилей. После нажатия на кнопку Готово сценарий сохраняется. Теперь, чтобы указать на объект тестирования, создаем профиль New – Profile и заполняем все параметры на вкладках. Здесь же доступны для редактирования некоторые параметры, задаваемые раннее с помощью мастера. Также указывается загрузка рисунков виртуальным пользователем, параметры аутентификации, использование Cookies и другие. На вкладке Recorder указываем адрес сайта, доступность которого можно тут же проверить, нажав Go. Одновременно последует запрос на запуск Recorder, который будет отслеживать посещенные страницы и записывать URI (они будут выводиться в панели слева). Когда вся информация собрана, нажимаем Run Test. Подробные отчеты в форме графика выводятся по ходу проведения теста, по окончании будет сформирована HTML-страница. В результате можно получить информацию о времени ответа сервера с возрастанием нагрузки, по количеству ошибок, переданных и принятых байт и т.д. NeoLoadNeoLoad (www.neotys.com) – еще одна система, позволяющая провести нагрузочное тестирование веб-приложений. Написана на Java, работает на компьютерах под управлением Windows NT/2000/XP, Linux и Solaris. В отчете можно получить подробную информацию по каждому загруженному файлу. NeoLoad весьма удобен для оценки работы отдельных компонентов (AJAX, PHP, ASP, CGI, Flash, апплетов и пр.). Возможна установка времени задержки между запросами (thinktime) – глобально и индивидуально для каждой страницы. Тестирование проводится как с использованием весьма удобной графической оболочки, так и с помощью командной строки (используя заранее подготовленный XML-файл). Поддерживает работу с протоколом HTTPS, с HTTP и HTTPS прокси, basic веб-аутентификацию и cookies, автоматически определяя данные во время записи сценария, и затем проигрывает во время теста. Для работы с различными профилями для регистрации пользователей могут быть использованы переменные. При проведении теста можно задействовать дополнительные мониторы (SNMP, WebLogic, WebSphere, RSTAT и Windows, Linux, Solaris), позволяющие контролировать и параметры системы, на которой работает веб-сервер. При помощи NeoLoad можно проводить и распределенные тесты. Один из компьютеров является контролером, на остальные устанавливаются генераторы нагрузки (loadGenerator). Контролер распределяет нагрузку между loadGenerator и собирает статистику. Очень удобно реализована работа с виртуальными пользователями. Пользователи имеют индивидуальные настройки, затем они объединяются в Populations (должна быть создана как минимум одна Populations), в Populations можно задать общее поведение (например, 40% пользователей популяции посещают динамические ресурсы, 20% читают новости). Виртуальные пользователи могут иметь индивидуальный IP-адрес, полосу пропускания и свой сценарий теста. Сценарий будущего теста создать очень просто. Запускаем приложение (при первом запуске потребуется ввести регистрационный ключ, 30-дневная версия после регистрации будет отправлена по почте), выбираем New Project, вводим название проекта. После этого будет показана небольшая подсказка по поводу дальнейших действий, нажатие Start Recording запустит веб-браузер, все перемещения будут записаны. По окончании нажимаем Stop Recording или закрываем браузер. Запускается мастер, который поможет создать виртуальных пользователей и произведет автоматический поиск динамических параметров в записанных страницах, выставит среднее значение thinktime. Компоненты страницы (HTML, images, CSS) сохраняются отдельно. Для получения результата требуется пройти три шага:
Отмечу, что, кроме общих значений, с помощью системы фильтров можно отобрать информацию по любому параметру. При желании проект сохраняется для повторного использования. Среди представленных продуктов возможность сравнения результатов теста есть только у NeoLoad. Используя утилиты нагрузочного тестирования, можно получить информацию о работе веб-сервиса, принять необходимые меры по устранению выявленных недостатков и гарантировать требуемую производительность. Продукты от MicrosoftКорпорация Microsoft предлагает целых два продукта, позволяющих протестировать веб-сервер под нагрузкой. Это Microsoft Application Stress Tool и Web Capacity Analysis Tool. Первый распространяется как отдельный продукт и имеет графический интерфейс. Второй входит в состав комплекта инструментов Internet Information Services 6.0 Resource Kit Tools, работает из командной строки. MAST более наглядный, в создании теста поможет простой мастер создания тестов, возможна работа с cookies, регулировка нагрузки по разным URL. Сценарий тестирования может быть создан вручную или записан с помощью веб-браузера и при необходимости отредактирован. В WAST уровень нагрузки (stress level) регулируется путем задания количества нитей, осуществляющих запросы к серверу, а число виртуальных пользователей рассчитывается как произведение числа нитей на число сокетов, открытых каждой из нитей. По окончании теста получаем простой отчет в текстовой форме, в котором дана информация по числу обрабатываемых запросов в единицу времени, среднему времени задержки, скорости передачи данных на сервер и с сервера, количеству ошибок и т.д. Отчет можно экспортировать в CSV-файл. Никаких возможностей по статистической обработке не предусмотрено, то есть с его помощью можно только оценить работу при определенных условиях. |