パフォーマンス – Linuxサーバで高いCPU負荷を発生させるにはどうすればいいですか?

benchmarking debian performance

私は現在、Cactiのインストールをデバッグしている最中で、CPU使用率のグラフをデバッグするためにCPU負荷を作成したいと思っています

私は単純にcat /dev/zero > /dev/nullを実行してみましたが、これは非常にうまく動作しますが、1つのコアしか利用していません

enter image description here

負荷がかかっているシステムリソースをテスト/最大化するより良い方法はありますか?

関連しています。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消費量の出力です

Script temp1.py creates three processes (PIDs - 9377, 9378, 9379) which load 3 of my cores

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


GitHub - GaetanoCarlucci/CPULoadGenerator: CPU Load Generator allows you to generate a fixed configurable CPU load for a finite time by means of PID regulator.
CPU Load Generator allows you to generate a fixed configurable CPU load for a finite time by means of PID regulator. - GaetanoCarlucci/CPULoadGenerator

かなりシンプルで科学的な解決策です

ここでは、CPUコア0に50%の負荷が発生するダイナミクスの例を見ることができます

enter image description here

他のコアでも同時に処理を実行することができます

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


pxzxzの並列実装です

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


タイトルとURLをコピーしました