Как создать пик нагрузки ЦП с командой удара

Я хочу создать приблизительно 100%-ю нагрузку на машину Linux. Это - четырехъядерная система, и я хочу все ядра, идущие полная скорость. Идеально, загрузка ЦП продлилась бы обозначенное количество времени и затем остановилась бы. Я надеюсь, что в ударе существует некоторый прием. Я думаю своего рода бесконечный цикл.

263
задан dkb 9 February 2016 в 00:12
поделиться

9 ответов

Вы также можете сделать

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, иначе вы убьете и его).

265
ответ дан 23 November 2019 в 02:29
поделиться
#!/bin/bash
while [ 1 ]
do
        #Your code goes here
done
3
ответ дан 23 November 2019 в 02:29
поделиться

Бесконечный цикл - моя идея. Причудливый вид:

while :; do :; done

(: то же самое, что true , ничего не делает и завершается с нулем)

Вы можете вызвать это в подоболочке и запустить в фон. Выполнения этого $ num_cores раз должно быть достаточно. После сна в желаемое время вы можете убить их всех, вы получите PID с помощью jobs -p (подсказка: xargs )

11
ответ дан 23 November 2019 в 02:29
поделиться

Это помогает мне:

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.

1
ответ дан 23 November 2019 в 02:29
поделиться

Я бы разделил эту штуку на 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
10
ответ дан 23 November 2019 в 02:29
поделиться
:(){ :|:& };:

Эта вилка-бомба вызовет разрушение процессора и, скорее всего, выйдет из строя ваш компьютер.

11
ответ дан 23 November 2019 в 02:29
поделиться
#!/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
4
ответ дан 23 November 2019 в 02:29
поделиться

Одно ядро (не вызывает внешний процесс):

while true; do true; done

Два ядра:

while true; do /bin/true; done

Последнее заставляет оба ядра работать на ~50%, хотя...

Это заставит оба ядра работать на 100%:

while true; do echo; done
26
ответ дан 23 November 2019 в 02:29
поделиться

Я использую stress для таких вещей, вы можете сказать ему, сколько ядер нужно максимально задействовать... он позволяет также нагружать память и диск.

Пример нагрузки на 2 ядра в течение 60 секунд

stress --cpu 2 --timeout 60

347
ответ дан 23 November 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: