2012-06-30 17:13:30 +0000 2012-06-30 17:13:30 +0000
178
178

Linuxサーバで高CPU負荷を出すにはどうすればいいですか?

私は現在 Cactiインストールのデバッグを行っており、CPU使用率のグラフをデバッグするためにCPU負荷を作成したいと考えています。

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

0x1&

関連。Windowsで高いCPU負荷を出すにはどうすればいいですか?

回答 (15)

207
207
207
2012-06-30 17:27:21 +0000

試しに stress Windows の consume.exe:

oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd
``` を試してみてください。
103
103
103
2012-07-01 14:55:54 +0000

余分なパッケージをインストールする必要はありません。それぞれがヌル命令(:)を繰り返しています。各ループは100%でCPUコアをロードすることができます。

もし、bashksh93や他のシェルが範囲をサポートしている場合(つまり、dashやそれより古いkshではない場合)、この非ポータブル構文を使うことができます:

for i in 1 2 3 4; do while : ; do : ; done & done

もし4と異なる場合は、4をロードしたいCPUの数で置き換えてください。

これらのループの1つを起動したときにバックグラウンドジョブがすでに実行されていなかったと仮定すると、そのコマンドで負荷の生成を停止することができます:

for i in {1..4}; do ...

@underscore_dのコメントに答えて、ここでは、負荷を停止する多くのことを単純化し、またタイムアウト(デフォルト60秒)を指定することができます強化されたバージョンがあります。このシェル機能は、少なくとも bash, ksh 以下では動作します。その場合、負荷の動作は実装に依存します(各スレッドが100%ビジーであるかどうかが報告される場合があります)。

21
21
21
2012-06-30 17:56:09 +0000

同じことをするシンプルな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))

ターミナルからこのスクリプトを実行してください。終わったらスクリプトを kill する必要があります。

これは、3つのコアをロードしたときのCPU消費量です。

17
17
17
2016-09-08 11:19:42 +0000

別の方法としては、

openssl speed -multi $(grep -ci processor /proc/cpuinfo)

または (nproc があれば)

openssl speed -multi $(nproc --all)

OpenSSL は最近のディストロではほとんど常に存在しているので、余分なパッケージは必要ありません。

9
9
9
2015-11-01 21:31:57 +0000

システム内のすべてのコアに対して、2つの

sha1sum /dev/zero &

コマンドを起動します。

8
8
8
2015-09-06 20:11:07 +0000

Linuxシステムの様々な側面にストレスを与えることができるストレスツールの更新版である stress-ng を開発してきました。詳細は 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
``` と似ています。
7
7
7
2012-07-25 21:33:40 +0000

私は通常 cpuburn スイートを使っています:

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 &を乗算することができます。

3
3
3
2012-07-01 02:09:16 +0000

このコマンドは何度でも実行することができ、毎回異なるコアを使用します:

$ CORES=1
$ for i in `seq 1 $CORES`; do cat /dev/zero > /dev/null &
> done
[1] 8388
2
2
2
2014-03-28 15:46:04 +0000

https://github.com/GaetanoCarlucci/CPULoadGenerator

かなりシンプルで科学的なソリューションです。

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

他のコアで同時にプロセスを実行することができます。

1
1
1
2018-11-07 20:11:11 +0000

pxzxz の並列実装です。

pxz -9e /dev/zero --stdout >/dev/null は非常に CPU を消費するので、これでうまくいくはずです。

もし /dev/zero が十分に速くない場合 (pxz が I/O スロットルされていることに気づくでしょう) は、pxz -9e /dev/zero --stdout | pxz -9e --stdout >/dev/null を使うことができます。

1
1
1
2016-06-22 16:47:39 +0000

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 $@
``` &001
1
1
1
2015-07-24 19:12:34 +0000

使用することができます:

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

dd if=/dev/zero of=/dev/null を CPU コアに対して繰り返します。

1
1
1
2019-05-17 15:33:18 +0000

私が使っている方法は以下の通りで、余計なものをインストールする必要はありません。

0
0
0
2012-06-30 19:08:04 +0000

簡単なコマンドラインでもできます:

x="x" ; while : ; do x=$x$x ; echo -n "." ; done
0
0
0
2018-12-11 20:03:28 +0000

@jlliagreさんのコメントに追記したかったのですが、評価が足りません。複数のサーバでこのコードを使用する場合で、CPU数が異なる場合は

for ((i=1; i<=`nproc --all`; i++)); do while : ; do : ; done & done

これは何個あってもサーバ上の全てのコアを利用することになります。コマンド nproc は coreutils の一部なので、ほとんどの Linux インストールで使用できます。