Linux サーバーで高い CPU 負荷を発生させるにはどうすればよいですか?

Linux サーバーで高い CPU 負荷を発生させるにはどうすればよいですか?

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

単純に を実行してみましたがcat /dev/zero > /dev/null、うまく動作しますが、コアは 1 つしか使用しません。

ここに画像の説明を入力してください

負荷がかかった状態でシステム リソースをテスト/最大限に活用するより良い方法はありますか?

関連している:Windows で高い CPU 負荷を発生させるにはどうすればよいですか?

答え1

試すstress これは Windows とほぼ同等ですconsume.exe

oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd

答え2

追加のパッケージをインストールする必要はなく、古き良きシェルだけで実行できます。

このワンライナーは、4 つのコア1 を100% でロードします。

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

動作は非常にシンプルで、4 つの無限ループを開始します。各ループはヌル命令 ( :) を繰り返します。各ループは CPU コアを 100% ロードできます。

bashksh93および範囲をサポートする他のシェル (つまり、dashまたは古い ではない)を使用する場合はksh、次の移植性のない構文を使用できます。

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

4と異なる場合は、ロードする CPU の数に置き換えます4

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

for i in 1 2 3 4; do kill %$i; done

@underscore_d のコメントに答えて、負荷の停止を大幅に簡素化し、タイムアウト (デフォルトは 60 秒) も指定できる拡張バージョンを紹介します。A 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
  )
}

1 コアあたり複数のスレッドをサポートする CPU (ハイパースレッディング) では、OS は負荷をすべての仮想 CPU にディスパッチすることに注意してください。その場合、負荷の動作は実装に依存します (各スレッドが 100% ビジーであると報告される場合とそうでない場合があります)

答え3

もう一つの方法は

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

または(nprocが存在する場合)

openssl speed -multi $(nproc --all)

OpenSSL は最近のディストリビューションにほぼ必ず存在するため、追加のパッケージは必要ありません。

答え4

2を開始

sha1sum /dev/zero &

システム内のすべてのコアに対するコマンド。

止まる

killall sha1sum

または

kill sha1sum

関連情報