Иногда для моделирования нагруженных условий работы программы или информационной системы, нужно уметь создавать искуственную нагрузку.
Создание нагрузки с помощью стандартных утилит
В Linux сделать такую нагрузку можно с помощью следующей команды:
while true; do dd if=/dev/urandom count=10M bs=1 | bzip2 -9 > /tmp/random.bin ; rm -f /tmp/random.bin ; done
Эта команда создаст как нагрузку на дисковую подсистему ввода-вывода за счет работы с большим генерируемым файлом, так и нагрузку на процессор за счет использования алгоритма упаковки. Если у bzip2 задана опция -9, то нагрузка больше распределяется на процессор, если задать опцию -1, то сильнее нагрузится HDD.
Если нужно нагрузить только процессор, то реальный файл /tmp/random.bin можно заменить /dev/null, и тогда команда будет выглядеть так:
while true; do dd if=/dev/urandom count=10M bs=1 | bzip2 -9 > /dev/null ; done
Если нужно нагрузить сразу несколько ядер, то можно запустить данную команду в нескольких терминалах.
Если надо создать нагрузку только на диск, то из команды можно исключить архиватор, чтобы скорость копирования не упиралась в возможности CPU, и вытягивать из файла рандомайзера большие куски данных (bs=50000):
while true; do dd if=/dev/urandom count=10000 bs=50000 > /tmp/random.bin ; rm -f /tmp/random.bin ; done
- данная команда будет работать с генерируемыми файлами размером 500Mb.
Создание нагрузки с помощью специализированной утилиты
Но для удобства можно воспользоваться утилитой stress, если она есть в репозитарии дистрибутива. Данной утилитой достаточно просто можно создать нагрузку на заданное количество ядер:
stress --cpu 4
С помощью опции --io <N> можно создать несколько "веркеров", которые будут генерировать нагрузку на дисковую систему ввода-вывода. А с помощью опции --vm <N> можно создать несколько "веркеров", генерирующих нагрузку на память вычислительного устройства.