Стресс-тестирование удобно использовать и для облачных и для физических серверов. Если вы работаете в облаках, вы сможете понять реальную пропускную способность узла. Если разворачиваете систему на физическом железе — сможете убедиться, что с железом все в порядке.
В .io мы используем более 100 физических серверов (кроме облачных) для обслуживания системы хранения и обработки статистики. Мы иногда сталкиваемся с багами даже на новых серверах. Проблемы могут быть разными — кулер на процессоре, из-за чего процессор во время работы может переходить в режим throttling (искусственное понижение частоты). Диск с багами (один из двух в RAID’e). Либо еще какая-нибудь муть.
Стресс-тест позволяет сгенерировать нагрузку на все ключевые подсистемы сервера. Это дает возможность убедиться, что все компоненты работают нормально.
Инструментов для стресс тестирования есть целая куча, мы остановились на stress-ng
(мы используем Ubuntu в качестве ОСи).
Обратите внимание, что стресс-тест — это внутренний тест. В отличие от инструментов нагрузочного тестирования, например ab
, стресс-тесты не заключаются в генерации запросов к внешним сервисам.
Инструмент устанавливается из пакетов:
apt-get install stress-ng
Для запуска стресс-теста необходимо выбрать тип теста и указать его параметры.
Прежде всего мы захотим проверить работу процессора.
stress-ng --class cpu --sequential 8 --timeout 60s --metrics-brief
# проводим тест процессора в 8 потоков
В этом тесте stress-ng
выполнит разные тесты из группы cpu
в 8 потоков (т.к. у нас 8 ядер), каждый длительностью в 60 секунд. Для тестирования будут последовательно использованы различные методы (например, подсчет общего наибольшего делителя или функции Аккермана). Будут выполняться не только математические операции, а и сортировки, шифрование, сжатие, поиск, работа со строками и т.п.
Во время тестов все ядра будут максимально загружены (результат htop
):
После теста мы увидим статистику выполнения всех 22х тестов процессора:
stress-ng: info: [6073] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s stress-ng: info: [6073] (secs) (secs) (secs) (real time) (usr+sys time) stress-ng: info: [6073] af-alg 115214848 60.03 5.24 474.46 1919440.07 240181.05 stress-ng: info: [6073] bsearch 156484 60.00 479.60 0.00 2608.01 326.28 stress-ng: info: [6073] context 2548147 60.00 240.41 239.15 42469.14 5313.51 stress-ng: info: [6073] cpu 115337 60.02 479.75 0.00 1921.49 240.41 stress-ng: info: [6073] cpu-online 458 60.59 0.55 3.15 7.56 123.78 stress-ng: info: [6073] crypt 51219 60.00 479.58 0.00 853.61 106.80 stress-ng: info: [6073] getrandom 1255727 60.00 0.01 478.74 20928.74 2622.93 stress-ng: info: [6073] heapsort 1789 60.00 479.55 0.01 29.82 3.73 stress-ng: info: [6073] hsearch 1486425 60.00 479.49 0.00 24773.70 3100.01 stress-ng: info: [6073] longjmp 43395789 60.00 479.61 0.00 723263.64 90481.41 stress-ng: info: [6073] lsearch 3431 60.00 479.61 0.00 57.18 7.15 stress-ng: info: [6073] matrix 1403584 60.00 479.57 0.00 23393.08 2926.76 stress-ng: info: [6073] mergesort 62685 60.00 478.97 0.02 1044.75 130.87 stress-ng: info: [6073] qsort 4505 60.00 479.50 0.01 75.08 9.40 stress-ng: info: [6073] rdrand 93458694 60.00 479.64 0.00 1557645.83 194851.75 stress-ng: info: [6073] str 16492215 60.00 479.59 0.00 274870.39 34388.15 stress-ng: info: [6073] stream 26741 60.01 477.74 0.05 445.62 55.97 stress-ng: info: [6073] tsc 558813483 60.00 479.65 0.00 9313568.26 1165044.27 stress-ng: info: [6073] tsearch 3540 60.04 479.61 0.00 58.96 7.38 stress-ng: info: [6073] vecmath 10179903 60.00 479.60 0.00 169665.15 21225.82 stress-ng: info: [6073] wcs 4452607 60.00 479.58 0.00 74210.12 9284.39 stress-ng: info: [6073] zlib 7667 60.16 480.79 0.02 127.43 15.95
# показатели после выполнения теста
Статистика будет включать название теста и цифры по скорости выполнения операций. Абсолютные величины особого значения не имеют. Однако их стоит сравнивать с цифрами серверов аналогичной конфигурации. Особенно цифры в колонках bogo ops/s
.
Для оперативной памяти есть группа тестов, куда входят операции выделения, копирования и очистки памяти. Кроме этого, в этот набор входят некоторые тесты из класса cpu
. Например, тест компрессии и сортировки.
stress-ng --class memory --sequential 8 --timeout 60s --metrics-brief
# группа тестов для оперативной памяти
Во время этого теста будем наблюдать другую картинку — большое количество оперативной памяти (и свопа) будет занято:
После окончания увидим резюме пройденных тестов:
stress-ng: info: [22818] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s stress-ng: info: [22818] (secs) (secs) (secs) (real time) (usr+sys time) stress-ng: info: [22818] brk 11133716 60.57 2.17 76.51 183827.09 141506.30 stress-ng: info: [22818] bsearch 153344 60.00 477.83 0.02 2555.66 320.90 stress-ng: info: [22818] hsearch 1481213 60.00 477.78 0.01 24686.84 3100.13 stress-ng: info: [22818] lsearch 3252 60.01 478.05 0.01 54.19 6.80 stress-ng: info: [22818] malloc 29479834 60.09 450.03 25.40 490593.76 62006.68 stress-ng: info: [22818] memcpy 113027 60.00 475.77 0.01 1883.73 237.56 stress-ng: info: [22818] mincore 17446227 60.00 42.99 434.86 290770.63 36509.84 stress-ng: info: [22818] null 3230050466 60.00 97.80 380.23 53834181.55 6757003.67 stress-ng: info: [22818] pipe 189110658 60.00 95.79 382.06 3151840.67 395753.18 stress-ng: info: [22818] qsort 4283 60.03 478.03 0.00 71.35 8.96 stress-ng: info: [22818] tsearch 4140 60.03 477.78 0.00 68.96 8.67 stress-ng: info: [22818] vm 8546560 60.00 473.77 3.71 142436.13 17899.30 stress-ng: info: [22818] vm-rw 21238 60.01 0.21 469.21 353.92 45.24 stress-ng: info: [22818] zero 1118192157 60.00 38.27 439.75 18636544.45 2339216.26
# показатели после выполнения теста
Тут есть две группы тестов, которые стоит выполнить. Сначала – группа тестирования низкого уровня I/O устройств:
stress-ng --class io --sequential 8 --timeout 60s --metrics-brief
Эта группа тестов включает создание/удаление файлов, запись блоков в файлы и синхронизацию данных в файлах с диском. Результат работы тестов:
stress-ng: info: [11309] aio 128372945 60.00 69.77 408.84 2139548.19 268220.36 stress-ng: info: [11309] aio-linux 1927396 60.13 258.22 220.36 32055.94 4027.32 stress-ng: info: [11309] hdd 786432 74.18 0.21 28.70 10601.49 27202.77 stress-ng: info: [11309] readahead 441786979 60.15 38.26 404.91 7344380.46 996879.25 stress-ng: info: [11309] seek 1568009 60.02 1.04 82.87 26124.47 18686.80 stress-ng: info: [11309] sync-file 8876 60.01 21.13 117.76 147.92 63.91
Кроме этого имеет смысл запустить стресс-тест файловой системы. Он включает создание/удаление файлов и папок, перемещение по дереву файлов, создание ссылок, блокировки, переименование и т.п.
stress-ng --class filesystem --sequential 8 --timeout 60s --metrics-brief
Во время тестирования дисковой подсистемы, можно наблюдать нагрузку на диск с помощью утилиты iostat
:
iostat 5 -y
# Покажет статистику работы дисков за последние 5 секунд
Результат выполнения тестов файловой системы:
stress-ng: info: [12865] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s stress-ng: info: [12865] (secs) (secs) (secs) (real time) (usr+sys time) stress-ng: info: [12865] chdir 19830 60.10 5.75 460.77 329.96 42.51 stress-ng: info: [12865] chmod 806679 60.00 1.38 372.56 13444.65 2157.24 stress-ng: info: [12865] dentry 4917506 60.04 19.03 194.20 81897.94 23061.98 stress-ng: info: [12865] dir 1228800 60.59 3.05 54.29 20280.12 21430.07 stress-ng: info: [12865] dup 2063319701 60.00 110.33 369.29 34388683.03 4301988.45 stress-ng: info: [12865] eventfd 144698784 60.00 34.29 445.27 2411643.14 301732.39 stress-ng: info: [12865] fallocate 1600 60.01 0.35 13.36 26.66 116.70 stress-ng: info: [12865] fcntl 344187771 60.00 132.90 346.80 5736472.46 717506.30 stress-ng: info: [12865] fiemap 153321 60.02 1.02 414.63 2554.48 368.87 stress-ng: info: [12865] flock 9337301 60.00 0.97 313.68 155621.73 29675.20 stress-ng: info: [12865] fstat 272440 60.03 0.40 4.99 4538.28 50545.45 stress-ng: info: [12865] getdent 22444354 60.00 13.87 463.80 374073.37 46987.15 stress-ng: info: [12865] iosync 1106646 60.00 0.66 136.86 18444.01 8047.16 stress-ng: info: [12865] inotify 6089 60.01 15.80 0.00 101.47 385.38 stress-ng: info: [12865] lease 38122684 60.00 26.03 453.26 635375.77 79539.91 stress-ng: info: [12865] link 35471509 60.04 41.14 217.34 590749.75 137231.16 stress-ng: info: [12865] lockf 12893276 60.00 2.33 477.04 214886.95 26896.29 stress-ng: info: [12865] mknod 9016351 60.07 22.98 218.11 150108.30 37398.28 stress-ng: info: [12865] open 170092328 60.00 7.15 471.97 2834874.01 355009.87 stress-ng: info: [12865] procfs 8 60.01 10.82 468.47 0.13 0.02 stress-ng: info: [12865] rename 8 0.00 0.00 0.00 43039.19 0.00 stress-ng: info: [12865] symlink 1698219 60.34 5.84 133.24 28145.33 12210.38 stress-ng: info: [12865] sync-file 15609 60.01 33.81 188.49 260.13 70.22 stress-ng: info: [12865] utime 113807443 60.00 8.75 470.62 1896793.03 237410.44 stress-ng: info: [12865] xattr 45397 60.01 12.90 181.27 756.55 233.80
Используйте инструменты стресс-тестирования, чтобы проверить работу железа и понять его реальную производительность. stress-ng – удобный инструмент для тестирования серверов на Ubuntu. Если нужно просто выполнить все тесты, используйте команду:
iostat 5 -y
# Выполнит более 40 различных стресс-тестов сервера
Во время выполнения тестов комп лучше не трогать. После выполнения статистика будет выведена прямо в консоли.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…