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


13

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

CPU(ハードディスクの負荷、ネットワーク、coのみ)のみをバーンインできるようにし、負荷を実行する期間を設定できるようにします。意味システムで10分間のCPU負荷:実行できるものが必要です。

何か案は?

回答:



6

私は浮動小数点演算を好む:

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

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


どうすれば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

4
軽微なポイント:そのforループは、並列ではなく直列に実行しませんか?私は思う(perl -e '...' &)ものの、シェルからそれらを切り離すために仕事をするだろう。
SmallClanger

あなたが正しい。投稿を修正します。それを指摘してくれてありがとう。
PP。



1

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

# 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
  )
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.