Я хочу создать приблизительно 100%-ю нагрузку на машину Linux. Это - четырехъядерная система, и я хочу все ядра, идущие полная скорость. Идеально, загрузка ЦП продлилась бы обозначенное количество времени и затем остановилась бы. Я надеюсь, что в ударе существует некоторый прием. Я думаю своего рода бесконечный цикл.
Вы также можете сделать
dd if=/dev/zero of=/dev/null
Чтобы запустить большее их количество для нагрузки на большее число ядер, попробуйте выполнить форк:
fulload() { dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null & }; fulload; read; killall dd
Повторите команду в фигурных скобках столько раз, сколько потоков вы хотите произвести (здесь 4 потока). Простое нажатие Enter остановит его (только убедитесь, что под этим пользователем не запущен другой dd, иначе вы убьете и его).
#!/bin/bash
while [ 1 ]
do
#Your code goes here
done
Бесконечный цикл - моя идея. Причудливый вид:
while :; do :; done
(:
то же самое, что true
, ничего не делает и завершается с нулем)
Вы можете вызвать это в подоболочке и запустить в фон. Выполнения этого $ num_cores
раз должно быть достаточно. После сна в желаемое время вы можете убить их всех, вы получите PID с помощью jobs -p
(подсказка: xargs
)
Это помогает мне:
bash -c 'for (( I=100000000000000000000 ; I>=0 ; I++ )) ; do echo $(( I+I*I )) & echo $(( I*I-I )) & echo $(( I-I*I*I )) & echo $(( I+I*I*I )) ; done' &>/dev/null
и не использует ничего, кроме bash.
Я бы разделил эту штуку на 2 скрипта :
infinite_loop.bash :
#!/bin/bash
while [ 1 ] ; do
# Force some computation even if it is useless to actually work the CPU
echo $((13**99)) 1>/dev/null 2>&1
done
cpu_spike.bash :
#!/bin/bash
# Either use environment variables for NUM_CPU and DURATION, or define them here
for i in `seq ${NUM_CPU}` : do
# Put an infinite loop on each CPU
infinite_loop.bash &
done
# Wait DURATION seconds then stop the loops and quit
sleep ${DURATION}
killall infinite_loop.bash
:(){ :|:& };:
Эта вилка-бомба вызовет разрушение процессора и, скорее всего, выйдет из строя ваш компьютер.
#!/bin/bash
duration=120 # seconds
instances=4 # cpus
endtime=$(($(date +%s) + $duration))
for ((i=0; i<instances; i++))
do
while (($(date +%s) < $endtime)); do :; done &
done
Одно ядро (не вызывает внешний процесс):
while true; do true; done
Два ядра:
while true; do /bin/true; done
Последнее заставляет оба ядра работать на ~50%, хотя...
Это заставит оба ядра работать на 100%:
while true; do echo; done
Я использую stress для таких вещей, вы можете сказать ему, сколько ядер нужно максимально задействовать... он позволяет также нагружать память и диск.
Пример нагрузки на 2 ядра в течение 60 секунд
stress --cpu 2 --timeout 60