- Стресс-тестирование серверов с помощью stress-ng
- Инструменты для стресс-тестов
- Тестирование CPU
- Тестирование оперативной памяти
- Тестирование дисков
- Мы не ищем баги: что такое нагрузочное тестирование
- Давид Нариманидзе
- Какими бывают нагрузочные тесты
- Как составить методику нагрузочного тестирования
- Зачем всё это?
- Как проводят нагрузочное тестирование
- ПО для НТ
- Выводы
Стресс-тестирование серверов с помощью stress-ng
Стресс-тестирование удобно использовать и для облачных и для физических серверов. Если вы работаете в облаках, вы сможете понять реальную пропускную способность узла. Если разворачиваете систему на физическом железе — сможете убедиться, что с железом все в порядке.
В .io мы используем более 100 физических серверов (кроме облачных) для обслуживания системы хранения и обработки статистики. Мы иногда сталкиваемся с багами даже на новых серверах. Проблемы могут быть разными — кулер на процессоре, из-за чего процессор во время работы может переходить в режим throttling (искусственное понижение частоты). Диск с багами (один из двух в RAID’e). Либо еще какая-нибудь муть.
Стресс-тест позволяет сгенерировать нагрузку на все ключевые подсистемы сервера. Это дает возможность убедиться, что все компоненты работают нормально.
Инструменты для стресс-тестов
Инструментов для стресс тестирования есть целая куча, мы остановились на stress-ng (мы используем Ubuntu в качестве ОСи).
Обратите внимание, что стресс-тест — это внутренний тест. В отличие от инструментов нагрузочного тестирования, например ab , стресс-тесты не заключаются в генерации запросов к внешним сервисам.
Инструмент устанавливается из пакетов:
apt-get install stress-ng
Для запуска стресс-теста необходимо выбрать тип теста и указать его параметры.
Тестирование CPU
Прежде всего мы захотим проверить работу процессора.
# проводим тест процессора в 8 потоков
В этом тесте stress-ng выполнит разные тесты из группы cpu в 8 потоков (т.к. у нас 8 ядер), каждый длительностью в 60 секунд. Для тестирования будут последовательно использованы различные методы (например, подсчет общего наибольшего делителя или функции Аккермана). Будут выполняться не только математические операции, а и сортировки, шифрование, сжатие, поиск, работа со строками и т.п.
Во время тестов все ядра будут максимально загружены (результат htop ):
После теста мы увидим статистику выполнения всех 22х тестов процессора:
# показатели после выполнения теста
Статистика будет включать название теста и цифры по скорости выполнения операций. Абсолютные величины особого значения не имеют. Однако их стоит сравнивать с цифрами серверов аналогичной конфигурации. Особенно цифры в колонках bogo ops/s .
Тестирование оперативной памяти
Для оперативной памяти есть группа тестов, куда входят операции выделения, копирования и очистки памяти. Кроме этого, в этот набор входят некоторые тесты из класса cpu . Например, тест компрессии и сортировки.
# группа тестов для оперативной памяти
Во время этого теста будем наблюдать другую картинку — большое количество оперативной памяти (и свопа) будет занято:
После окончания увидим резюме пройденных тестов:
# показатели после выполнения теста
Тестирование дисков
Тут есть две группы тестов, которые стоит выполнить. Сначала – группа тестирования низкого уровня I/O устройств:
Эта группа тестов включает создание/удаление файлов, запись блоков в файлы и синхронизацию данных в файлах с диском. Результат работы тестов:
Кроме этого имеет смысл запустить стресс-тест файловой системы. Он включает создание/удаление файлов и папок, перемещение по дереву файлов, создание ссылок, блокировки, переименование и т.п.
Во время тестирования дисковой подсистемы, можно наблюдать нагрузку на диск с помощью утилиты iostat :
# Покажет статистику работы дисков за последние 5 секунд
Результат выполнения тестов файловой системы:
Используйте инструменты стресс-тестирования, чтобы проверить работу железа и понять его реальную производительность. stress-ng – удобный инструмент для тестирования серверов на Ubuntu. Если нужно просто выполнить все тесты, используйте команду:
# Выполнит более 40 различных стресс-тестов сервера
Во время выполнения тестов комп лучше не трогать. После выполнения статистика будет выведена прямо в консоли.
Highload нужны авторы технических текстов. Вы наш человек, если разбираетесь в разработке, знаете языки программирования и умеете просто писать о сложном!
Откликнуться на вакансию можно здесь .
Источник
Мы не ищем баги: что такое нагрузочное тестирование
Как узнать, не превратится ли ваш интернет-магазин в тыкву во время «чёрной пятницы» — когда трафик вырастет в 10 раз.
Давид Нариманидзе
Taode01 в Twitter. 28 лет. Полтора года в нагрузочном тестировании, куда перекатился из системного администрирования и любительской разработки мобильных приложений. В абсолютном восторге от работы, потому что это редкая возможность спасать компанию от лишних трат, а клиентов — от расходования совсем не казённых нервов. Да ещё и практически неограниченно развиваться самому: во время работы в НТ приходится и код писать, и железо подбирать, и взаимодействовать с большим количеством клёвых специалистов из других отделов.
Нагрузочное тестирование (НТ) — один из тестов производительности. От любой системы требуется быстро и правильно отвечать на запросы пользователей: и если правильность ответов относится скорее к функциональному тестированию, скорость является как раз заботой специалистов по нагрузочному тестированию. Однако формулировка «система должна отвечать быстро» — слабое требование.
Мне нравится определение из блога Miro на «Хабре»: «Нагрузочное тестирование — это тип тестирования, в котором мы проверяем, соответствует ли наша система поставленным нефункциональным требованиям к производительности при работе под высокой нагрузкой в различных сценариях».
В основе статьи — Twitter-тред автора.
Какими бывают нагрузочные тесты
Начнём с того, какие бывают виды тестирования. У каждого инженера есть мнение на этот счёт, поэтому и я поделюсь своим 🙂 Я разделяю тесты на функциональные, нефункциональные и связанные с изменениями.
Функциональное тестирование. В него входит проверка безопасности и взаимодействия — мы испытываем систему и осознанно бьём по её слабым местам, убеждаемся, что она выполняет все функции, которые были прописаны в ТЗ.
Нефункциональное тестирование (НФ). Определяет характеристики ПО, которые измеряются в каких-то конкретных величинах. В первую очередь на таких тестах изучают производительность системы — проводят нагрузочное и стрессовое тестирование, исследуют стабильность и работу с большими базами данных. А после этого проверяют настройки, отказоустойчивость и восстановление системы, ищут способы увеличить её производительность. Тестирование производительности помогает узнать, как меняются стабильность и быстродействие системы под разной нагрузкой, а также проверить её масштабируемость, надёжность и уточнить, сколько ресурсов она будет использовать.
Вид НФ-теста | На какие вопросы отвечает |
---|---|
Нагрузка | Соответствует ли нефункциональным требованиям система |
Стабильность | Надёжно ли работает система в течение продолжительного времени |
Отказоустойчивость | Сможет ли система сама переместиться на другой сервер, если откажет основной |
Восстановление | Как быстро система восстановится после сбоя |
Стресс | Что случится при незапланированной нагрузке |
Объём | Как будет работать проект, если база данных вырастет в 100 раз |
Масштабируемость | Как будет увеличиваться нагрузка на компоненты системы с ростом числа пользователей |
Потенциал | Сколько пользователей могут работать в системе одновременно |
Конфигурация | Как заставить систему работать быстрее |
Сравнение | Какое оборудование и ПО выбрать |
Тесты, связанные с изменениями. К этой категории относятся:
- регрессионное тестирование — когда мы ищем ошибки в старых частях программы;
- смоук-тест — когда мы определяем работоспособность новой сборки;
- тест билда — когда ищем все баги.
Как составить методику нагрузочного тестирования
Методика нагрузочного тестирования (МНТ) — почти как Библия для нагрузочника. Это документ, в который необходимо вписать всё, что может случиться на проекте, учесть максимальное число сценариев и результаты тестов.
Чтобы обезопасить себя от факапов, в методике нужно сразу прописать значения всех терминов, чтобы потом не возникло недопонимания, которое обычно приводит к судам и нервотрёпке.
Я разрабатываю методику нагрузочного тестирования по такой структуре:
1. Информация о проекте и определения терминов.
2. Цели тестирования. Например, «внедрить в программу новую фичу» или «подготовить интернет-магазин к распродаже, когда пользователей на сайте будет в X раз больше».
3. Ограничения нагрузочного тестирования. Это не функциональное тестирование, а значит, мы намеренно не ищем баги и не оцениваем внешние системы, потому что нас наняли на проверку только одной.
4. Отличия от настоящей системы. Клиент должен знать, что мы используем заглушки , эмуляторы и виртуализацию , а база данных отличается от той, которая будет на продакшене. Заглушки на результаты не влияют, виртуализация — слабо, а вот отличия в БД — сильно.
У меня заглушки и эмуляторы работают на Java, скрипты я пишу в HP LoadRunner, а запускаю в Performance Center.
5. Причины ошибочных результатов. Пишем, что неправильный пейсинг — время задержки между сценариями — приведёт к некорректным данным тестов.
6. Раздел с описанием тестового стенда. Это схемы с серверами, заглушками и генераторами нагрузки.
7. Таблица с требованиями к железу.
8. Таблица отличий стенда от системы на продакшене.
9. Стратегия тестирования.
10. Описание видов тестирования.
11. Требования к производительности от заказчика.
12. Моделирование нагрузки.
13. Профиль (который мы получаем от аналитиков или собираем на основе бизнес-прогнозов).
15. Стоимость внезапного изменения требований к проекту. Это избавит исполнителя и заказчика от лишних забот.
16. Материалы для сдачи проекта, куда входит всё, что мы подготовили для следующего специалиста.
Зачем всё это?
Если заказчик ничего не знает о конкретном тестировании, методика ответит на все его вопросы. В ней объясняется, за что компания платит деньги подрядчику и какие результаты получит на выходе.
В МНТ можно дать определение максимальной производительности. Мы пишем, что выполним серию тестов и пошагово будем увеличивать нагрузку до предельной, а в конце сделаем контрольную проверку и выясним показатели производительности.
Стратегия заканчивается выводами и списком критериев успешного завершения НТ. В выводы включаются данные, которые мы получили в результате мониторинга, общее заключение и список успешно проведённых тестов.
Как проводят нагрузочное тестирование
Чтобы провести нагрузочные тесты новой системы, я использую такой чек-лист:
- Разбираюсь в системе.
- Узнаю, зачем клиенту нужно нагрузочное тестирование.
- Разрабатываю методику и стратегию.
- Пишу скрипты.
- Провожу тесты.
- Собираю данные мониторинга.
- Анализирую полученные данные.
- Пишу отчёт.
- Сверяюсь с МНТ, чтобы удостовериться, что все пункты выполнены.
ПО для НТ
Для проведения нагрузочного тестирования необходимо специфическое ПО.
Я лично работаю с HP LoadRunner, ещё есть ПО Gatling, Apache JMeter, BlazeMeter, LoadNinja и даже отечественный «Яндекс.Танк». У каждого из них есть свои плюсы и минусы: одни не работают со специфическими протоколами, другие бесплатны, третьи больше дружат с тяжёлыми скриптами и так далее.
Почему я использую LoadRunner? С одной стороны, он ориентирован на энтерпрайз-приложения — и это влияет на ценообразование, он очень дорогой. Да, пару десятков вьюзеров вы, конечно, сможете прогнать бесплатно, но этого не хватит для полноценного НТ, в котором используются сотни и тысячи виртуальных пользователей.
Зато LoadRunner позволяет тестировщикам ПО проводить комплексную оценку производительности своей системы. Его фишка — выявление узких мест ещё до того, как приложение будет внедрено или развёрнуто. В результате пользователи могут оценить каждый компонент по отдельности — даже прежде, чем он начнёт работать.
Выводы
- Нагрузочное тестирование не выявляет баги, а помогает узнать, на что способна система. Вы будете уверены, что сайт или приложение не упадут, когда пользователей станет больше или база данных вырастет.
- Работу нельзя начинать без методики нагрузочного тестирования. В ней необходимо указать, как пройдёт тестирование и какой результат получит клиент: это защищает от возможной нервотрёпки и судов.
обложка: кадр из фильма «Зомби по имени Шон»
Источник