Как сгенерировать загрузку процессора на сервере Linux

13

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

Я хотел бы иметь возможность прожигать только процессор (без загрузки жесткого диска, сети и совместной работы) и чтобы я мог установить период, в течение которого будет работать нагрузка. Это означает, что я хочу что-то, что сможет работать: загрузка процессора в течение 10 минут в системе.

Есть идеи?

Максим Векслер
источник

Ответы:

6

Я предпочитаю операции с плавающей точкой:

for i in `seq 64`; do perl -e '$z=time()+(10*60); while (time()<$z) { $j++; $sqrt = sqrt($j) for (1..9999); }' & done

Будьте в курсе вашего номера процессора :-)


источник
как я могу timeэто?
Себастьян
2

Это то, что я часто хочу сделать. Но у меня нет хорошего способа сделать это. Я просто пишу небольшой скрипт на Perl, который будет повторяться столько раз, сколько я хочу.

Например (в течение 10 минут):

perl -e '$z=time()+(10*60); while (time()<$z) { $j++; $j *= 1.1 for (1..9999); }'

Конечно, если у вас есть n процессоров, вы можете добавить цикл bash для создания такого количества процессов:

#!/bin/bash
# e.g. for 4 processors
for i in 1 2 3 4; do
    perl -e .... &
done
wait
PP.
источник
4
Незначительный момент: не будет ли этот forцикл запускать их последовательно, а не параллельно? Я думаю, (perl -e '...' &)что отсоединение их от оболочки сделало бы работу, хотя.
SmallClanger
Ты прав. Я исправлю свой пост. Спасибо что подметил это.
пп.
1

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

http://kernel.ubuntu.com/~cking/stress-ng/

Колин Кинг
источник
1

Вот чистый способ (по крайней мере bash& ksh), который я уже опубликовал в ответ на подобный вопрос здесь

# Usage: lc [number_of_cpus_to_load [number_of_seconds] ]
lc() {
  (
    pids=""
    cpus=${1:-1}
    seconds=${2:-60}
    echo loading $cpus CPUs for $seconds seconds
    trap 'for p in $pids; do kill $p; done' 0
    for ((i=0;i<cpus;i++)); do while : ; do : ; done & pids="$pids $!"; done
    sleep $seconds
  )
}
jlliagre
источник