「Stress-ng」ツールを使用して Linux に高 CPU 負荷とストレス テストを課す方法
システム管理者は、Linux システムに高負荷がかかっているときに、その状態を調べて監視する必要があるかもしれません。これは、システム管理者やプログラマーにとって次のことを行うための良い方法となります。
- システム上のアクティビティを微調整します。
- オペレーティング システムのカーネル インターフェイスを監視します。
- CPU、メモリ、ディスク デバイス、その他多くの Linux ハードウェア コンポーネントをテストして、ストレス下でのパフォーマンスを観察します。
- システム上のさまざまな電力消費負荷を測定します。
このガイドでは、Linux システムでのストレス テストのための 2 つの重要なツールであるstress とstress-ng について説明します。
1. ストレス – システムを CPU、メモリ、I/O、ディスク ストレスの構成可能な測定値にさらすように設計されたワークロード生成ツールです。
2. stress-ng – システムの次の機能をテストするストレス ワークロード生成ツールの更新バージョンです。
- CPU コンピューティング
- ドライブストレス
- I/O同期
- パイプI/O
- キャッシュのスラッシング
- VMストレス
- ソケットのストレス
- プロセスの作成と終了
- コンテキスト切り替えプロパティ
これらのツールはシステムを調べるのに適していますが、システム ユーザーだけが使用すべきではありません。
重要: これらのツールを root ユーザー権限で使用することを強くお勧めします。これらのツールを使用すると、Linux マシンに急速に負荷がかかる可能性があり、設計が不十分なハードウェアでの特定のシステム エラーを回避することができるからです。 。
Linux に「stress」ツールをインストールする方法
Debian とその派生製品 (Ubuntu や Mint など) にストレス ツールをインストールするには、次のコマンドを実行します。
sudo apt-get install stress
RHEL/CentOS および Fedora Linux にストレスをインストールするには、EPEL リポジトリをオンにして、次の yum コマンドを入力して、同じ:
yum install stress
ストレスを使用するための一般的な構文は次のとおりです。
sudo stress option argument
いくつかのオプションはストレスで使用できます。
- sqrt() 関数で回転する N 個のワーカーを生成するには、次のように –cpu N オプションを使用します。
- sync() 関数で回転する N 個のワーカーを生成するには、次のように –io N オプションを使用します。
- malloc()/free() 関数で回転する N 個のワーカーを生成するには、–vm N オプションを使用します。
- VM ワーカーごとにメモリを割り当てるには、–vm-bytes N オプションを使用します。
- メモリ リソースを解放して再割り当てする代わりに、–vm-keep オプションを使用してメモリをリダーティにすることができます。
- –vm-hang N オプションを使用してメモリを解放する前に、スリープを N 秒に設定します。
- write()/unlink() 関数で回転する N 個のワーカーを生成するには、–hdd N オプションを使用します。
- –timeout N オプションを使用すると、N 秒後のタイムアウトを設定できます。
- 次のように –backoff N オプションを使用して、作業が開始される前に待機係数を N マイクロ秒に設定します。
- ストレスの実行時にさらに詳細な情報を表示するには、-v オプションを使用します。
- –help を使用して、ストレスの使用に関するヘルプを表示するか、マンページを表示します。
Linux システムでストレスを使用するにはどうすればよいですか?
1. コマンドを実行するたびにその効果を調べるには、まず uptime コマンドを実行し、負荷平均を書き留めます。
次に、stress コマンドを実行して、20 秒のタイムアウトで sqrt() 上で回転する 8 つのワーカーを生成します。ストレスを実行した後、 再度 uptime コマンドを実行し、負荷平均を比較します。
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 8 --timeout 20
tecmint@tecmint ~ $ uptime
サンプル出力
tecmint@tecmint ~ $ uptime
17:20:00 up 7:51, 2 users, load average: 1.91, 2.16, 1.93 [<-- Watch Load Average]
tecmint@tecmint ~ $ sudo stress --cpu 8 --timeout 20
stress: info: [17246] dispatching hogs: 8 cpu, 0 io, 0 vm, 0 hdd
stress: info: [17246] successful run completed in 21s
tecmint@tecmint ~ $ uptime
17:20:24 up 7:51, 2 users, load average: 5.14, 2.88, 2.17 [<-- Watch Load Average]
2. タイムアウトを 30 秒にして sqrt() で回転する 8 つのワーカーを生成し、操作に関する詳細情報を表示するには、次のコマンドを実行します。
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 8 -v --timeout 30s
tecmint@tecmint ~ $ uptime
サンプル出力
tecmint@tecmint ~ $ uptime
17:27:25 up 7:58, 2 users, load average: 1.40, 1.90, 1.98 [<-- Watch Load Average]
tecmint@tecmint ~ $ sudo stress --cpu 8 -v --timeout 30s
stress: info: [17353] dispatching hogs: 8 cpu, 0 io, 0 vm, 0 hdd
stress: dbug: [17353] using backoff sleep of 24000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 8 [17354] forked
stress: dbug: [17353] using backoff sleep of 21000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 7 [17355] forked
stress: dbug: [17353] using backoff sleep of 18000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 6 [17356] forked
stress: dbug: [17353] using backoff sleep of 15000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 5 [17357] forked
stress: dbug: [17353] using backoff sleep of 12000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 4 [17358] forked
stress: dbug: [17353] using backoff sleep of 9000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 3 [17359] forked
stress: dbug: [17353] using backoff sleep of 6000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 2 [17360] forked
stress: dbug: [17353] using backoff sleep of 3000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 1 [17361] forked
stress: dbug: [17353] tecmint@tecmint ~ $ uptime
17:27:59 up 7:59, 2 users, load average: 5.41, 2.82, 2.28 [<-- Watch Load Average]
3. malloc() 関数と free() 関数の 1 つのワーカーを 60 秒のタイムアウトでスワンするには、次のコマンドを実行します。
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --vm 1 --timeout 60s
tecmint@tecmint ~ $ uptime
サンプル出力
tecmint@tecmint ~ $ uptime
17:34:07 up 8:05, 2 users, load average: 1.54, 2.04, 2.11 [<-- Watch Load Average]
tecmint@tecmint ~ $ sudo stress --vm 1 --timeout 60s
stress: info: [17420] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: info: [17420] successful run completed in 60s
tecmint@tecmint ~ $ uptime
17:35:20 up 8:06, 2 users, load average: 2.45, 2.24, 2.17 [<-- Watch Load Average]
4. sqrt() で回転する 4 つのワーカー、sync() で回転する 2 つのワーカー、malloc()/free() で回転する 2 つのワーカーを 20 秒の時間でスワンし、メモリを割り当てるにはVM ワーカーあたり 256MB、以下のコマンドを実行します。
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s
tecmint@tecmint ~ $ uptime
サンプル出力
tecmint@tecmint ~ $ uptime
17:40:33 up 8:12, 2 users, load average: 1.68, 1.84, 2.02 [<-- Watch Load Average]
tecmint@tecmint ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s
stress: info: [17501] dispatching hogs: 4 cpu, 3 io, 2 vm, 0 hdd
stress: info: [17501] successful run completed in 20s
tecmint@tecmint ~ $ uptime
17:40:58 up 8:12, 2 users, load average: 4.63, 2.54, 2.24 [<-- Watch Load Average]