Что такое стресс тест серверов

Стресс-тестирование серверов с помощью 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. Материалы для сдачи проекта, куда входит всё, что мы подготовили для следующего специалиста.

Зачем всё это?

Если заказчик ничего не знает о конкретном тестировании, методика ответит на все его вопросы. В ней объясняется, за что компания платит деньги подрядчику и какие результаты получит на выходе.

В МНТ можно дать определение максимальной производительности. Мы пишем, что выполним серию тестов и пошагово будем увеличивать нагрузку до предельной, а в конце сделаем контрольную проверку и выясним показатели производительности.

Стратегия заканчивается выводами и списком критериев успешного завершения НТ. В выводы включаются данные, которые мы получили в результате мониторинга, общее заключение и список успешно проведённых тестов.

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

Чтобы провести нагрузочные тесты новой системы, я использую такой чек-лист:

  1. Разбираюсь в системе.
  2. Узнаю, зачем клиенту нужно нагрузочное тестирование.
  3. Разрабатываю методику и стратегию.
  4. Пишу скрипты.
  5. Провожу тесты.
  6. Собираю данные мониторинга.
  7. Анализирую полученные данные.
  8. Пишу отчёт.
  9. Сверяюсь с МНТ, чтобы удостовериться, что все пункты выполнены.

ПО для НТ

Для проведения нагрузочного тестирования необходимо специфическое ПО.

Я лично работаю с HP LoadRunner, ещё есть ПО Gatling, Apache JMeter, BlazeMeter, LoadNinja и даже отечественный «Яндекс.Танк». У каждого из них есть свои плюсы и минусы: одни не работают со специфическими протоколами, другие бесплатны, третьи больше дружат с тяжёлыми скриптами и так далее.

Почему я использую LoadRunner? С одной стороны, он ориентирован на энтерпрайз-приложения — и это влияет на ценообразование, он очень дорогой. Да, пару десятков вьюзеров вы, конечно, сможете прогнать бесплатно, но этого не хватит для полноценного НТ, в котором используются сотни и тысячи виртуальных пользователей.

Зато LoadRunner позволяет тестировщикам ПО проводить комплексную оценку производительности своей системы. Его фишка — выявление узких мест ещё до того, как приложение будет внедрено или развёрнуто. В результате пользователи могут оценить каждый компонент по отдельности — даже прежде, чем он начнёт работать.

Выводы

  1. Нагрузочное тестирование не выявляет баги, а помогает узнать, на что способна система. Вы будете уверены, что сайт или приложение не упадут, когда пользователей станет больше или база данных вырастет.
  2. Работу нельзя начинать без методики нагрузочного тестирования. В ней необходимо указать, как пройдёт тестирование и какой результат получит клиент: это защищает от возможной нервотрёпки и судов.

обложка: кадр из фильма «Зомби по имени Шон»

Источник

Читайте также:  Как отвлечься от чувств любви
Оцените статью