サーバーの偽の負荷をテストしたいのですが、システムのCPU負荷を生成するバーンインまたはベンチマークコマンドラインユーティリティを探しています。
CPU(ハードディスクの負荷、ネットワーク、coのみ)のみをバーンインできるようにし、負荷を実行する期間を設定できるようにします。意味システムで10分間のCPU負荷:実行できるものが必要です。
何か案は?
サーバーの偽の負荷をテストしたいのですが、システムのCPU負荷を生成するバーンインまたはベンチマークコマンドラインユーティリティを探しています。
CPU(ハードディスクの負荷、ネットワーク、coのみ)のみをバーンインできるようにし、負荷を実行する期間を設定できるようにします。意味システムで10分間のCPU負荷:実行できるものが必要です。
何か案は?
回答:
「ストレス」ユーティリティをダウンロードしてインストールできます。これにより、コマンドラインからCPU、メモリ、ディスク、およびIOの負荷を生成できます。
私は浮動小数点演算を好む:
for i in `seq 64`; do perl -e '$z=time()+(10*60); while (time()<$z) { $j++; $sqrt = sqrt($j) for (1..9999); }' & done
CPU番号に注意してください:-)
これは私が頻繁にやりたいことです。しかし、私はそれを行う良い方法がありません。必要なだけループする小さな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
for
ループは、並列ではなく直列に実行しませんか?私は思う(perl -e '...' &)
ものの、シェルからそれらを切り離すために仕事をするだろう。
stress-ngを使用することをお勧めします。ストレスよりも多くの機能を備えており、オペレーティングシステムのはるかに多くを行使できます。
ここに、同様の質問への返信としてすでに投稿した純粋なシェル(少なくとも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
)
}
time
これができますか?