私は現在、Cactiのインストールをデバッグしている最中で、CPU使用率のグラフをデバッグするためにCPU負荷を作成したいと思っています
私は単純にcat /dev/zero > /dev/null
を実行してみましたが、これは非常にうまく動作しますが、1つのコアしか利用していません
負荷がかかっているシステムリソースをテスト/最大化するより良い方法はありますか?
関連しています。Windowsで高いCPU負荷を出すには?
200 Der Hochstapler 2012-06-30
試しにstress
を使ってみると、Windowsのconsume.exe
とかなり同等です
oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd
230 Mitesh Shah 2012-06-30
余分なパッケージをインストールする必要はありません、あなたの古き良きシェルはそれを単独で行うことができます
このワンライナーはあなたの4つのコア1を100%でロードします
for i in 1 2 3 4; do while : ; do : ; done & done
どのように動作するかは非常に単純で、4つの無限ループを開始します。それぞれがヌル命令(:
)を繰り返しています。各ループは100%でCPUコアに負荷をかけることができます
bash
, ksh93
やその他のシェルが範囲をサポートしている場合 (つまり dash
やそれ以前の ksh
ではない)、この移植性のない構文を使うことができます
for i in {1..4}; do ...
4
と異なる場合は、4
を負荷したいCPUの数に置き換えてください
これらのループのいずれかを起動したときにバックグラウンドジョブが既に実行されていなかったと仮定すると、このコマンドで負荷の発生を停止することができます
for i in 1 2 3 4; do kill %$i; done
underscore_dのコメントに答えて、ロードの停止を簡単にし、タイムアウト(デフォルトでは60秒)を指定できるようにした拡張版があります。このシェル関数は少なくとも 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 が 1 つのコアにつき 2 つ以上のスレッドをサポートしている場合 (ハイパースレッディング)、OS はすべての仮想 CPU に負荷を分散します。その場合、負荷の挙動は実装に依存します (各スレッドが 100%ビジー状態であるかどうかが報告されるかもしれません)
114 jlliagre 2012-07-01
同じことをするシンプルな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消費量の出力です
23 Pushpak Dagade 2012-06-30
別の方法としては
openssl speed -multi $(grep -ci processor /proc/cpuinfo)
または (nproc が存在する場合)
openssl speed -multi $(nproc --all)
OpenSSLは最近のディストロにはほとんど存在しているので、余分なパッケージは必要ありません
21 rkosegi 2016-09-08
Start two
sha1sum /dev/zero &
コマンドを使用します
To stop
killall sha1sum
or
kill sha1sum
11 ecabuk 2015-11-01
Linuxシステムの様々な側面にストレスを与えることができるストレスツールの更新版である stress-ng を開発してきました。詳細については、http://kernel.ubuntu.com/~cking/stress-ng/ を参照してください
使い方はストレスに似ています
$ 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
Install with
sudo apt-get install stress-ng
9 Colin King 2015-09-06
私は普段、カプバーンのスイートルームを利用しています
sudo apt-get install cpuburn
for i in {1..4}; do burnK7 & done
4を、あなたが持っている、またはストレスをかけたいコア/HTスレッドの数に置き換えてください
注:これは、同時に可能な限り多くのチップ面積にストレスを与え、それは最大の電力散逸を生成するようにプログラムされています。私はこの投稿を2回目に書かなければならなかった、なぜか私のマシンはそれを好きではありませんでした 🙁
シーケンスでCPUBURNをすることもできます
burnP6 & burnP6 & burnP6 & burnP6 &
[1] 28520
[2] 28521
[3] 28522
[4] 28523
そして、それを止めたいと思った時に
killall burnP6
また、システムのCPUコア数に合わせてburnP6 &
を掛け算することもできます
7 ce4 2012-07-25
そのコマンドを何度でも実行することができ、毎回異なるコアを占有します
$ CORES=1
$ for i in `seq 1 $CORES`; do cat /dev/zero > /dev/null &
> done
[1] 8388
3 Christian Mann 2012-07-01
かなりシンプルで科学的な解決策です
ここでは、CPUコア0に50%の負荷が発生するダイナミクスの例を見ることができます
他のコアでも同時に処理を実行することができます
2 user 2014-03-28
私は+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 $@
1 TJR 2016-06-22
pxz
はxz
の並列実装です
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
オプションがあります
1 styrofoam fly 2018-11-07
私が使っている方法はこんな感じで、余計なものをインストールする必要はありません
例えば、4つのプロセスで開始するには、次のようになります
nproc | xargs seq | xargs -n1 -P4 md5sum /dev/zero
上記の「-P」オプションでプロセス数を変更することができます
1 yichun 2019-05-17
使えます
fulload() { 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
dd if=/dev/zero of=/dev/null
をCPUコアに対して繰り返します
テストを停止するには、任意のキーを押してください
1 Lyma Lyma 2015-07-24
簡単なコマンドラインでもできます
x="x" ; while : ; do x=$x$x ; echo -n "." ; done
0 ott– 2012-06-30
@jlliagreさんのコメントに追記したかったのですが、評価が足りません。このコードを複数のサーバで使う場合で、CPU数にばらつきが出る場合は
for ((i=1; i<=`nproc --all`; i++)); do while : ; do : ; done & done
これにより、サーバーのコア数に関係なく、サーバー上のすべてのコアを利用することができます。nproc
コマンドは coreutils の一部なので、ほとんどの Linux インストールにあるはずです
0 AndreasKralj 2018-12-11
CPUにあるすべてのコアを指定してstress
のプログラムを実行してください
stress -c `nproc`
Debian/Ubuntuで入手できます。sudo apt install stress
0 Smeterlink 2020-04-16