概要
AWS上でサーバ構築後のテストフェーズで
「アラート設定のテストで CPU やメモリの使用率を 80% まで上げたい」
という事が必要になります。
例えばCloudWatch で閾値アラームを作ったものの、
「本当に通知が飛ぶのか?」
とか
「EC2の負荷が高いときグラフがどのように描画されるのか」
という確認が必要になります。
そんな時に使えるのが stress コマンド。
「サーバにストレスを与える」コマンドで
CPU・メモリ・I/O などに自由に負荷を掛けて
負荷試験や監視アラートのテスト、パフォーマンス検証に活用できます。
本記事では、
「CPU とメモリを意図的に 80% まで上げる方法」
を Amazon Linux 2023 の EC2 を例に解説します。
1. stressコマンドのインストール
まずは stress をインストールします。
Amazon Linux 2023 では dnf でサクッと入ります。
sudo dnf install -y stress
これで準備完了。
「stress」は非常にシンプルなツールで、
CPU 回しっぱなし・メモリ確保しっぱなし のような操作を簡単に実行できます。
📝 豆知識
Amazon Linux 2023 は RHEL 系の “Fedora 由来” なので、
dnf や systemd を使った操作がしやすく、負荷試験系ツールとの相性も良好です。
2. CPUに負荷を与える(80%付近まで上昇)
EC2のvCPU数に応じて指定します(例:t3.medium = vCPU 2)
stress の CPU 負荷はとてもシンプルで、
ワーカー数 = CPU を使用するプロセス数 で調整します。
例として t3.medium(2 vCPU)の場合:
※2コアを5分間(300秒)フル稼働
stress --cpu 2 --timeout 300
・ --cpu 2 → 2個のワーカーが CPU をフルで回す
・ --timeout 300 → 5分間(300秒)継続
実際には CPU 使用率は 100% に張り付きますが、
CloudWatch の「平均 CPU 使用率」では 70%~90% の間で揺れることが多いです。
AWS 側での集計間隔や、OS のスケジューリングにもよるためのようです。
💡 CPU100%を避けたい場合は?
あえてワーカ数を vCPU より少なくすると、80% 前後に落ち着きます。
例:t3.medium(2 vCPU)で
stress --cpu 1 --timeout 300
するとだいたい「50%〜70%」程度に収まります。
CPU の負荷はとにかく分かりやすく、
CloudWatch のグラフに反映されるのも速いので、
監視テストに最適です。
3. メモリ負荷を与える
続いてメモリです。
stress のメモリ負荷は「どれだけメモリを確保して維持するか」で調整します。
基本形:
※メモリを 400MB 分確保して 60秒間維持
stress --vm 1 --vm-bytes 400M --timeout 60s
【パラメータ解説】
・ --vm 1:1つのワーカープロセスを使用
・ --vm-bytes 400M:400MBのメモリを確保
・ --timeout 60s:60秒後に自動終了(Ctrl+Cで途中停止も可)
例えば t2.nano(メモリ約 512MB)に 400MB を確保すると、
メモリ使用率は 70〜85% あたりまで上昇します。
メモリは CPU と違い、バックグラウンドで OS がキャッシュを持っていたり、
CloudWatch エージェント側の集計にもタイムラグがあるため、
「ピタッと80%」とはいきませんが、だいたい目的は達成できます。
【インスタンスサイズ別の目安値】
| インスタンス | 総メモリ | 試す値の目安 (--vm-bytes) |
|---|---|---|
| t2.nano | 約 512MB | 400M |
| t2.micro | 約 1GB | 800M |
| t3.small | 約 2GB | 1600M |
| t3.medium | 約 4GB | 3200M |
これらはあくまで目安で、
アプリが常駐している環境や、背景でキャッシュを持っている場合は変動します。
■ポイント
CloudWatch エージェントで mem_used_percent を取得している場合、
少し遅れて 5〜10 秒後に反映されることもあるようです。
すぐにグラフが動かないからといって、設定ミスしたという事でもないようです。