Виды тестирования производительности

Вячеслав Смирнов

Виды тестирования производительности

Вячеслав Смирнов

owasp@yandex.ru

Что такое
тестирование производительности?

Тестирование производительности сегодня

В программе курса

Инженер по производительности —
на все руки мастер.
Начнём с малого — скорости ответов сервера

Возможности инструментов для
тестирования производительности

Узконаправленная синтетическая нагрузка

Прицельная пулемётная очередь

Случайная или повторяющаяся стрельба

Разнообразная и точная нагрузка

Инструмент подбирается под задачу

Обилие терминов в сети Интернет

Виды
тестирования производительности

Видов тестирования много

Виды тестирования производительности @polarnik (github.com)

Выделим

Виды тестирования производительности @polarnik (github.com)

Пять видов тестирования производительности

Производительность

количественная характеристика скорости выполнения операций

Выдержит ли система планируемую нагрузку?
Есть ли узкие места?

Нагрузочное тестирование (load testing)
выполнение программы с повышением нагрузки
от среднего профиля до максимального и выше

Нагрузка подаётся ступенями

растёт количество операций в единицу времени

Или нагрузка растёт плавно

выше максимума, чтобы знать есть ли запас

Анализ длительности обработки запросов

ищём точку деградации и недоступности (timeout, 504, …)

Сохраняем интенсивность (deg, off)

сравниваем с профилем нагрузки (min, med, max)

Анализ утилизации ресурсов: cpu, memory, …

ищём узкое место, лимиты, в т.ч. конфигурационные

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

необходимо понимание работы системы: %usr, %sys, …

Анализ логов, ошибок, кодов ответов

ищем точку появления ошибок под нагрузкой

Сохраняем интенсивность (error)

стараемся избавиться от ошибок и предупреждений

Отчёт: точка деградации, ошибок, отказа, …

и их отношение к профилю нагрузки: med, max

Выбирем профиль для теста стабильности

обычно, 80% от точки деградации/появления ошибок

☑ Выдержит ли система планируемую нагрузку?
☑ Есть ли узкие места?
Нашли точку деградации, ошибок, отказа
выбрали максимальную рабочую нагрузку - work
выявили узкие места и ошибки, устранили их

Что будет при эксплуатации 24x7?
Стабильна ли система под нагрузкой?
Как быстро растёт размер базы данных и логов?
Есть ли утечка соединений, памяти?
Нет ли потерь данных?

Тестирование стабильности (stability testing)
длительное тестирование со средней нагрузкой, поиском отклонений и проверками корректности работы

Выбирается рабочая нагрузка

не выше предельной, чтобы не было ошибок

Тестирование проводится длительное время

всю ночь или все выходные

Количественные и функциональные проверки

выполняются во время или между итерациями

Стараться в тестировании стабильности

избежать неравномерной нагрузки: 1 сценарий/мин, но …

Пиков и спадов нагрузки по запросам

раз за разом

Пиков и спадов нагрузки по запросам

раз за разом, раз за разом

Сложно выявлять аномалии

если утилизация ресурсов нестабильна

Прогрев (RampUp) сглаживает пики

но требует времени — идеальный равен шагу нагрузки

Паузы уменьшают вероятность пиков

но их сложно расчитать — идеально делить по запросам

Прогрев с паузами можно объединить

требует умения и пары экспериментов

И тогда показатели будут стабильны

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

Утечки ресурсов и ошибки

попадут в отчёт по тестированию стабильности

☑ Что будет при эксплуатации 24x7?
☑ Стабильна ли система под нагрузкой?
☑ Как быстро растёт размер базы данных?
☑ Есть ли утечка соединений, памяти?
☑ Нет ли потерь данных?

Если нагрузка ненадолго превысит максимум?
Освобождаются ли неиспользуемые ресурсы?
Восстановится ли система после ошибок?
Какие ошибки проявляются под нагрузкой?

Жил да был один сервер,
было у него три друга-сервера,
и однажды он решил перезагрузиться.

Сначала всё было хорошо

нагрузка на каждый сервер была средней

Один ушел на перезагрузку

нагрузка подросла

Второй не выдержал

нагрузка ещё подросла

Третий не выдержал

и снова нагрузка подросла, пользователи заметили

Работа начала восстанавливаться

а нагрузка выравниваться

Работа почти восстановилась

нагрузка распределилась

Система справилась

нагрузка снова минимальная

Стрессовое тестирование (stress testing)
тестирование за пределами рабочих нагрузок,
в ограниченных ресурсах

Быстро и ненадолго повысим нагрузку

и повторим такой процесс несколько раз

Выявим утечку ресурсов

проверим корректность обработки исключений

Выявим утечку ресурсов

возможно, что ресурсы не освобождаются полностью

Выявим утечку ресурсов

возможно, что ресурсы не освобождаются частично

Проверим реакцию на временное зависание

быстро ли разбираются внутренние очереди системы

☑ Если нагрузка ненадолго превысит максимум?
☑ Освобождаются ли неиспользуемые ресурсы?
☑ Восстановится ли система после ошибок?
☑ Какие ошибки проявляются под нагрузкой?

А что будет через 5 лет работы?
Или через 10 лет работы при том же профиле?
Или если размер документов увеличить?
Нужно объёмное тестирование

Объемное тестирование (volume testing)
тестирование при увеличении объемов данных

Наполняем базу, запускаем нагрузку

сценарий — через 1 год работы

Наполняем базу, запускаем нагрузку

сценарий — через 5 лет работы

Наполняем базу, запускаем нагрузку

сценарий — через 10 лет работы

Увеличивается объём БД, а не интенсивность.
Нужно иметь и генератор нагрузки и данных.
Быстрые генераторы БД пишутся на SQL.
А готовят запросы на python, bash, java, …

Обработка пакета запросов

профиль нагрузки — размер пакета данных

☑ А что будет через 5 лет работы?
☑ Или через 10 лет работы при том же профиле?
☑ Или если размер документов увеличить?
Объёмное тестирование проведено.

Поможет ли увеличение памяти в 2 раза?
Какой предел на другом железе?
Какая производительность при двух серверах?

Масштабируемости (scalability testing)
серия нагрузочных тестов
для разных профилей оборудования,
количества серверов или узлов системы,
настроек — размеров очередей, лимитов, …

Наращивание мощности оборудования

вертикальное масштабирование

Тестирование на разных конфигурациях

для прогноза затрат

Наращивание мощности оборудования

имеет технический предел

Наращивание количества узлов

горизонтальное масштабирование

Наращивание количества узлов

закладывается в архитектуру

Наращивание количества узлов

даёт гибкость

☑ Поможет ли увеличение памяти в 2 раза?
☑ Какой предел на другом железе?
☑ Какая производительность при двух серверах?

Пять видов тестирования производительности

Вячеслав Смирнов

owasp@yandex.ru,
@qa_load

Спасибо!