はじめに
システムの負荷テストやパフォーマンステストを行いたい場面で役立つstress-ng
について試してみる。
stress-ng
は、CPU、メモリ、ディスク、ネットワークなど様々なリソースに対して負荷をかけることができる多機能な負荷テストツールである。
環境
Windows 11 Professional
WSL2 Ubuntu 24.04 LTS
stress-ngとは
stress-ng
は、システムの様々なコンポーネントに負荷をかけてストレステストを実行するツールである。
元々のstress
コマンドの進化版で、より多くの負荷テストパターンと詳細な制御が可能である。
できること
- CPU負荷: 計算集約的な処理でCPUに負荷をかける
- メモリ負荷: メモリアロケーションや読み書きでメモリに負荷をかける
- ディスク負荷: ファイルI/Oでディスクに負荷をかける
- ネットワーク負荷: ネットワーク通信で負荷をかける
インストール
sudo apt install stress-ng
使用例
基本的な使用法
# 基本構文
stress-ng [オプション] [ストレッサー] [引数] [--timeout 時間]
CPU負荷
# 1つのCPUコアに100%負荷をかける(10秒間)
stress-ng --cpu 1 --timeout 10s
# 4つのCPUコアに負荷をかける(60秒間)
stress-ng --cpu 4 --timeout 60s
# CPU負荷を20%に制限して実行
stress-ng --cpu 1 --cpu-load 20 --timeout 30s
メモリ負荷
# 1GB のメモリに負荷をかける(30秒間)
stress-ng --vm 1 --vm-bytes 1G --timeout 30s
# 複数のメモリワーカーで負荷をかける
stress-ng --vm 4 --vm-bytes 512M --timeout 60s
ディスク負荷テスト
# ディスクI/O負荷をかける(10秒間)
stress-ng --hdd 1 --timeout 10s
# 特定のサイズでファイルI/O負荷
stress-ng --hdd 1 --hdd-bytes 100M --timeout 30s
複合負荷テスト
# CPU、メモリ、ディスクに同時に負荷をかける
stress-ng --cpu 2 --vm 1 --vm-bytes 512M --hdd 1 --timeout 60s
オプション一覧
基本オプション
オプション | 説明 | 例 |
---|---|---|
--timeout N | 実行時間を指定(秒、分、時、日) | --timeout 60s , --timeout 5m |
--verbose | 詳細な情報を出力 | --verbose |
--quiet | エラー以外の出力を抑制 | --quiet |
--help | ヘルプメッセージを表示 | --help |
--version | バージョン情報を表示 | --version |
CPU関連オプション
オプション | 説明 | 例 |
---|---|---|
--cpu N | CPUストレッサーのワーカー数 | --cpu 4 |
--cpu-load P | CPU使用率をP%に制限 | --cpu-load 50 |
--cpu-method M | CPU負荷の計算方法を指定 | --cpu-method pi |
メモリ関連オプション
オプション | 説明 | 例 |
---|---|---|
--vm N | 仮想メモリストレッサーのワーカー数 | --vm 2 |
--vm-bytes B | 各ワーカーが使用するメモリサイズ | --vm-bytes 1G |
--vm-method M | メモリアクセスパターンを指定 | --vm-method write64 |
ディスク関連オプション
オプション | 説明 | 例 |
---|---|---|
--hdd N | ディスクストレッサーのワーカー数 | --hdd 1 |
--hdd-bytes B | 各ワーカーが書き込むデータサイズ | --hdd-bytes 100M |
--temp-path P | 一時ファイルの保存パス | --temp-path /tmp |
統計・ログ関連オプション
オプション | 説明 | 例 |
---|---|---|
--metrics | 詳細な統計情報を表示 | --metrics |
--metrics-brief | 簡潔な統計情報を表示 | --metrics-brief |
--log-file F | ログファイルに出力 | --log-file stress.log |
制御オプション
オプション | 説明 | 例 |
---|---|---|
--dry-run | 実際には実行せずテスト | --dry-run |
--aggressive | より積極的な負荷をかける | --aggressive |
--sequential | ストレッサーを順次実行 | --sequential |
使ってみる
実際にstress-ng
を使ってシステムに負荷をかけてみる。
実際のCPU負荷テスト
# CPU1コアに負荷をかけて10秒間実行
stress-ng --cpu 1 --timeout 10s --verbose
実行結果
ログ
stress-ng: debug: [19194] invoked with 'stress-ng --cpu 1 --timeout 10s --verbose' by user 1002 'kbushi'
stress-ng: debug: [19194] stress-ng 0.17.06
stress-ng: debug: [19194] system: Linux kbushi 5.15.153.1-microsoft-standard-WSL2 #1 SMP Fri Mar 29 23:14:13 UTC 2024 x86_64, gcc 13.2.0, glibc 2.39
stress-ng: debug: [19194] RAM total: 31.0G, RAM free: 25.6G, swap free: 8.0G
stress-ng: debug: [19194] temporary file path: '/home/kbushi', filesystem type: ext2 (218682997 blocks available)
stress-ng: debug: [19194] 24 processors online, 24 processors configured
stress-ng: info: [19194] setting to a 10 secs run per stressor
stress-ng: debug: [19194] CPU data cache: L1: 32K, L2: 1024K, L3: 98304K
stress-ng: debug: [19194] cache allocate: shared cache buffer size: 98304K
stress-ng: info: [19194] dispatching hogs: 1 cpu
stress-ng: debug: [19194] starting stressors
stress-ng: debug: [19194] 1 stressor started
stress-ng: debug: [19195] cpu: [19195] started (instance 0 on CPU 2)
stress-ng: debug: [19195] cpu: using method 'all'
stress-ng: debug: [19195] cpu: [19195] exited (instance 0 on CPU 2)
stress-ng: debug: [19194] cpu: [19195] terminated (success)
stress-ng: debug: [19194] metrics-check: all stressor metrics validated and sane
stress-ng: info: [19194] skipped: 0
stress-ng: info: [19194] passed: 1: cpu (1)
stress-ng: info: [19194] failed: 0
stress-ng: info: [19194] metrics untrustworthy: 0
stress-ng: info: [19194] successful run completed in 7.85 secs
実際のメモリ負荷テスト
# 512MBのメモリに負荷をかけて30秒間実行
stress-ng --vm 1 --vm-bytes 512M --timeout 30s --verbose
ログ
stress-ng: debug: [19291] invoked with 'stress-ng --vm 1 --vm-bytes 512M --timeout 30s --verbose' by user 1002 'kbushi'
stress-ng: debug: [19291] stress-ng 0.17.06
stress-ng: debug: [19291] system: Linux kbushi 5.15.153.1-microsoft-standard-WSL2 #1 SMP Fri Mar 29 23:14:13 UTC 2024 x86_64, gcc 13.2.0, glibc 2.39
stress-ng: debug: [19291] RAM total: 31.0G, RAM free: 25.6G, swap free: 8.0G
stress-ng: debug: [19291] temporary file path: '/home/kbushi', filesystem type: ext2 (218682984 blocks available)
stress-ng: debug: [19291] 24 processors online, 24 processors configured
stress-ng: info: [19291] setting to a 30 secs run per stressor
stress-ng: debug: [19291] CPU data cache: L1: 32K, L2: 1024K, L3: 98304K
stress-ng: debug: [19291] cache allocate: shared cache buffer size: 98304K
stress-ng: info: [19291] dispatching hogs: 1 vm
stress-ng: debug: [19291] starting stressors
stress-ng: debug: [19291] 1 stressor started
stress-ng: debug: [19292] vm: [19292] started (instance 0 on CPU 6)
stress-ng: debug: [19292] vm: using method 'all'
stress-ng: debug: [19292] vm: [19292] exited (instance 0 on CPU 16)
stress-ng: debug: [19291] vm: [19292] terminated (success)
stress-ng: debug: [19291] metrics-check: all stressor metrics validated and sane
stress-ng: info: [19291] skipped: 0
stress-ng: info: [19291] passed: 1: vm (1)
stress-ng: info: [19291] failed: 0
stress-ng: info: [19291] metrics untrustworthy: 0
stress-ng: info: [19291] successful run completed in 27.84 secs
統計情報付きでの実行
# 詳細な統計情報と共にCPU負荷テスト
stress-ng --cpu 2 --timeout 60s --metrics-brief
ログ
stress-ng: info: [20411] setting to a 1 min, 0 secs run per stressor
stress-ng: info: [20411] dispatching hogs: 2 cpu
stress-ng: metrc: [20411] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s
stress-ng: metrc: [20411] (secs) (secs) (secs) (real time) (usr+sys time)
stress-ng: metrc: [20411] cpu 237944 55.61 111.25 0.00 4278.53 2138.89
stress-ng: info: [20411] skipped: 0
stress-ng: info: [20411] passed: 2: cpu (2)
stress-ng: info: [20411] failed: 0
stress-ng: info: [20411] metrics untrustworthy: 0
stress-ng: info: [20411] successful run completed in 55.62 secs
実行結果例では以下の情報が表示される
- テスト実行にかかった時間
- 実行された操作の回数
- 秒間の操作数
システム監視と併用
別のターミナルでtop
やhtop
コマンドを実行しながらstress-ngを動かすと、リアルタイムでCPU使用率の変化を確認できる。
# ターミナル1: システム監視
top
# ターミナル2: 負荷テスト実行
stress-ng --cpu 4 --timeout 120s
負荷制限機能
# CPU使用率を50%に制限して負荷テスト
stress-ng --cpu 2 --cpu-load 50 --timeout 60s --verbose
参考
stress-ng マニュアルページ
https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.htmlColinIanKing / stress-ng - GitHub
https://github.com/ColinIanKing/stress-ngstress-ng - Ubuntu パッケージ
https://packages.ubuntu.com/noble/universe/stress-ng
おわりに
stress-ng
は、システムの負荷テストやパフォーマンステストに使えるツールとなっている。
CPU、メモリ、ディスク、ネットワークなど様々なリソースに対して細かく制御された負荷をかけることができ、システムの安定性や性能の限界を調べるのに役立つ。
特に、負荷制限機能(--cpu-load
)を使うことで、システムを完全に停止させることなく段階的にテストを実施できるところもよい。
開発環境でのテストやシステム運用前の動作確認に業務でも活用できたらよいなあ。Apache JMeter
も今度使ってみたい。