
私は現在、Cacti インストールのデバッグCPU 使用率グラフをデバッグするために CPU 負荷を作成したいと考えています。
単純に を実行してみましたがcat /dev/zero > /dev/null
、うまく動作しますが、コアは 1 つしか使用しません。
負荷がかかった状態でシステム リソースをテスト/最大限に活用するより良い方法はありますか?
答え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% ロードできます。
bash
、ksh93
および範囲をサポートする他のシェル (つまり、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