私は現在、 Cactiインストールのデバッグ をしており、CPU使用率グラフをデバッグするためのCPU負荷を作成したいと考えています。
私は単純にcat /dev/zero > /dev/null
を実行しようとしました。
負荷のかかるシステムリソースをテスト/最大化するためのより良い方法はありますか?
試してみてください stress
これは、Windowsのconsume.exe
とほぼ同じです。
oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd
余分なパッケージをインストールする必要はありません。古き良きシェルは単独でそれを行うことができます。
このワンライナーは4つのコアをロードします1 100%で:
for i in 1 2 3 4; do while : ; do : ; done & done
仕組みは非常に簡単で、4つの無限ループを開始します。それぞれがヌル命令(:
)を繰り返しています。各ループは、CPUコアを100%でロードできます。
bash
、ksh93
、および範囲をサポートする他のシェル(つまり、dash
以前のksh
ではない)を使用する場合、次の移植性のない構文を使用できます。
for i in {1..4}; do ...
4
と異なる場合は、4
をロードするCPUの数に置き換えます。
これらのループの1つを起動したときに、バックグラウンドジョブが既に実行されていないと仮定すると、そのコマンドで負荷生成を停止できます。
for i in 1 2 3 4; do kill %$i; done
@underscore_dのコメントに答えて、ロードの停止を大幅に簡略化し、タイムアウト(デフォルトは60秒)を指定できる拡張バージョンを示します。 Control-C すべての暴走ループも殺します。このシェル関数は、少なくとも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
)
}
1CPUがコアごとに複数のスレッドをサポートする(ハイパースレッディング)場合、OSはすべての仮想CPUに負荷をディスパッチすることに注意してください。その場合、ロード動作は実装に依存します(各スレッドが100%ビジーであるかどうかを報告する場合があります)。。
私は同じことをする簡単なpythonスクリプトを作りました。あなたがロードしたいCPUコアの数を制御することができます。これについての良いところは、それがCPU以外に他のどのリソースも消費しないということです。 (Mark johnsonのアイデアは多くのI/Oリソースを消費することになると私は思う。ここでは望ましくない。)
from multiprocessing import Pool
def f(x):
# Put any cpu (only) consuming operation here. I have given 1 below -
while True:
x * x
# decide how many cpus you need to load with.
no_of_cpu_to_be_consumed = 3
p = Pool(processes=no_of_cpu_to_be_consumed)
p.map(f, range(no_of_cpu_to_be_consumed))
このスクリプトを端末$ python temp1.py
から実行するだけです。完了したらスクリプトを終了する必要があります。
これは、3つのコアをロードしたときのCPU消費量の出力です。
1つの代替方法は
openssl speed -multi $(grep -ci processor /proc/cpuinfo)
または(nprocが存在する場合)
openssl speed -multi $(nproc --all)
OpenSSLは最近のディストリビューションではほとんどいつも存在しているので、追加のパッケージは必要ありません。
スタート2
sha1sum /dev/zero &
システム内のすべてのコアに対するコマンド。
止まる
killall sha1sum
または
kill sha1sum
私は通常cpuburnスイートを取ります:
Sudo apt-get install cpuburn
for i in {1..4}; do burnK7 & done
4を、持っている、または強調したいコア/ HTスレッドの数に置き換えます。
注:これは同時に可能な限り多くのチップ面積を圧迫し、それは最大の電力消費を生成するようにプログラムされています。私はこの記事をもう一度書かなければならなかった、どういうわけか私のマシンはそれを好まなかった:-(
Cpuburnを順番に実行することもできます。
burnP6 & burnP6 & burnP6 & burnP6 &
[1] 28520
[2] 28521
[3] 28522
[4] 28523
そして、あなたがそれらを止めたいときは:
killall burnP6
システムのCPUコアの数に合わせてburnP6 &
を増やすこともできます。
私はstress-ngを開発しています。これは、Linuxシステムのさまざまな側面にストレスをかけることができる最新のストレスツールです。詳細については、 http://kernel.ubuntu.com/~cking/stress-ng/ を参照してください。
使い方は stress に似ています
$ stress-ng --cpu 4 --vm 2 --fork 8 --switch 4 --timeout 1m
stress-ng: info: [32254] dispatching hogs: 4 cpu, 8 fork, 4 switch, 2 vm
stress-ng: info: [32254] cache allocate: default cache size: 8192K
と一緒にインストール
Sudo apt-get install stress-ng
このコマンドは何度でも実行できます。毎回異なるコアを使用します。
$ CORES=1
$ for i in `seq 1 $CORES`; do cat /dev/zero > /dev/null &
> done
[1] 8388
https://github.com/GaetanoCarlucci/CPULoadGenerator
非常にシンプルで科学的な解決策。
ここでは、CPUコア0に50%の負荷が発生するダイナミクスの例を見ることができます。
同時に他のコアでプロセスを実行できます。
あなたが使用することができます:
fulload() { dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null & }; fulload; read; killall dd
あなたのCPUコアに対してdd if=/dev/zero of=/dev/null
を繰り返してください。
テストを中止するには任意のキーを押してください。
これが私の使用方法です。追加のものをインストールする必要はありません。
たとえば4つのプロセスから始めると、
nproc | xargs seq | xargs -n1 -P4 md5sum /dev/zero
上記の "-P"オプションでプロセス数を変更できます。
私は+ jlliagreと+ ecabukの両方を組み合わせました。
#!/bin/bash
lc() {
nowMs=$(date +%s)
(
pids=""
cpus=${1:-1}
seconds=${2:-60}
echo "[$(date)] loading $cpus CPUs for $seconds seconds"
echo "[$(date)] Expected completion: [$(date --date=@$(expr $nowMs + $seconds))]"
trap 'for p in $pids; do kill $p; done' 0
for ((i=0;i<cpus;i++)); do
sha1sum /dev/zero &
pids="$pids $!";
done
sleep $seconds
)
echo "[$(date)] Done"
}
lc $@
簡単なコマンドラインでも可能です。
x="x" ; while : ; do x=$x$x ; echo -n "." ; done
これを@ jlliagreのコメントに追加したいと思いましたが、私は十分な評判がありません。このコードを複数のサーバーで使用する予定で、CPU数が変わる場合は、次のコマンドを使用できます。
for ((i=1; i<=`nproc --all`; i++)); do while : ; do : ; done & done
これにより、サーバの数に関係なく、サーバ上のすべてのコアが利用されます。コマンドnproc
はcoreutilsの一部なので、ほとんどのLinuxインストールで使用する必要があります。
pxz
はxz
の並列実装です。
これはかなりCPU集約的なので、pxz -9e /dev/zero --stdout >/dev/null
がトリックをするべきです。
/dev/zero
の速度が十分ではない(pxz
がI/Oを抑制していることに気付いた)場合は、pxz -9e /dev/zero --stdout | pxz -9e --stdout >/dev/null
を実行できます。
新しいバージョンのxz
には、pxz
の代わりになる--threads
オプションがあります。