web-dev-qa-db-ja.com

LinuxサーバーでCPU負荷を生成する方法

サーバーの偽の負荷をテストしたいのですが、システムにCPU負荷を生成するバーンインまたはベンチマークコマンドラインユーティリティを探しています。

CPUのみをバーンインできるようにしたい(ハードディスクの負荷、ネットワーク、およびcoを使用しない)こと、および負荷を実行する期間を設定できるようにしたい。つまり、システムでCPU負荷を10分間実行できるようにする必要があります。

何か案は?

13
Maxim Veksler

"stress"ユーティリティをダウンロードしてインストールできます...コマンドラインからCPU、メモリ、ディスク、およびIO loadを生成できます。

ホームページ: http://people.seas.harvard.edu/~apw/stress/

FAQ: http://people.seas.harvard.edu/~apw/stress/FAQ

12
ewwhite

私は浮動小数点演算を好みます:

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

CPU番号に注意してください:-)

6
user62968

これは私がよくやりたいことです。しかし、私にはそれを行う良い方法がありません。必要なだけ何秒間もループする小さな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
2
PP.

私はstress-ngを使用することをお勧めします。これはstressよりもはるかに多くの機能を備えており、はるかに多くのオペレーティングシステムを実行できます。

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

1
Colin King

これは、同様の質問への返信として既に投稿した純粋なシェル(少なくともbashksh)の方法です here

# 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
  )
}
1
jlliagre