Как создать выброс процессора с помощью команды bash - PullRequest
247 голосов
/ 28 мая 2010

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

Ответы [ 22 ]

0 голосов
/ 30 сентября 2015

Просто вставьте этого плохого парня в SSH или консоль любого сервера под управлением Linux. Вы можете убить процессы вручную, но я просто отключаю сервер, когда я закончу, быстрее.

Редактировать: я обновил этот скрипт, чтобы теперь иметь функцию таймера, чтобы не нужно было убивать процессы.

read -p "Please enter the number of minutes for test >" MINTEST && [[ $MINTEST == ?(-)+([0-9]) ]]; NCPU="$(grep -c ^processor /proc/cpuinfo)";  ((endtime=$(date +%s) + ($MINTEST*60))); NCPU=$((NCPU-1)); for ((i=1; i<=$NCPU; i++)); do while (($(date +%s) < $endtime)); do : ; done & done
0 голосов
/ 04 июня 2014

Я объединил некоторые ответы и добавил способ масштабирования стресса для всех доступных процессоров:

#!/bin/bash

function infinite_loop { 
    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
}

# Either use environment variables for DURATION, or define them here
NUM_CPU=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
PIDS=()
for i in `seq ${NUM_CPU}` ;
do
# Put an infinite loop on each CPU
    infinite_loop &
    PIDS+=("$!")
done

# Wait DURATION seconds then stop the loops and quit
sleep ${DURATION}

# Parent kills its children 
for pid in "${PIDS[@]}"
do
    kill $pid
done
...