この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
こんにちは、西海です。
弊社ブログ記事にある下記ハンズオンを実施した際に、CPU・メモリ・ディスクの各使用率をstressコマンド1つで全て増加させることができたので、その内容についてまとめます。
〇CloudWatchでサーバーを監視し、メトリクスの閾値を超えた時にメールで通知を受けとる。
https://cloud5.jp/cloudwatch-agent-nakaniwa/
目的
stressコマンドを使用してCPU・メモリ・ディスクの各使用率を増加させる。
それによってアラーム発報とEメールが送信されることを確認する。
事前準備
本ブログではシステム構築については省略します。
先ほどの記事を参照し、構築してください。
【記事URL】
〇CloudWatchでサーバーを監視し、メトリクスの閾値を超えた時にメールで通知を受けとる。
https://cloud5.jp/cloudwatch-agent-nakaniwa/
stressコマンドについて
stressコマンドの公式infoには以下のように記載されています。
"stress"はベンチマークではなく、特定のサブシステムに指定された負荷をかけるためのツールです。これは、システム管理者がチューニング活動を行いたい場合、カーネルまたはライブラリ開発者がサービス拒否の可能性を評価したい場合など、有用な場面があります。
(ChatGPT-3.5にて翻訳)
基本的な構文およびオプションは以下になります。
Usage: stress [OPTION [ARG]] ...
-?, --help show this help statement
--version show version statement
-v, --verbose be verbose
-q, --quiet be quiet
-n, --dry-run show what would have been done
-t, --timeout N timeout after N seconds
--backoff N wait factor of N microseconds before work starts
-c, --cpu N spawn N workers spinning on sqrt()
-i, --io N spawn N workers spinning on sync()
-m, --vm N spawn N workers spinning on malloc()/free()
--vm-bytes B malloc B bytes per vm worker (default is 256MB)
--vm-stride B touch a byte every B bytes (default is 4096)
--vm-hang N sleep N secs before free (default none, 0 is inf)
--vm-keep redirty memory instead of freeing and reallocating
-d, --hdd N spawn N workers spinning on write()/unlink()
--hdd-bytes B write B bytes per hdd worker (default is 1GB)
stressコマンドインストール
下記コマンドでインストールします。
sudo yum install stress
コマンド入力後、「Complete」と表示されれば正常にインストールが完了しています。
検証
CPU使用率検証
最初にCPU使用率を検証します。
まずは現在のCPU使用率を「top」コマンドで確認します。
id値はアイドル中(未使用中)のCPU率です。そのため現在のCPU使用率は「0.3%」となります。
CPU使用率を増加させるために、下記コマンドを入力します。
stress --cpu 1 --timeout 5m &
# バックグラウンドで起動するように「&」を付けています。
各オプション値は以下のようになります。
--cpu [ ]:起動するプロセス数
--timeout [ ]:タイムアウトまでの時間
コマンド入力後、再度topコマンドでCPU使用率を確認します。
stressコマンドがCPUをほぼ100%使用していることが分かります。
Cloudwatchアラームの状態を確認すると、アラームが発報していました。
SNSによりメール通知も受信しています。
メモリ使用率検証
次にメモリ使用率を検証します。
まずはfreeコマンドを使用して現在のメモリ使用量を確認します。
その際オプションの「-h」を付けて単位を表示させます。
free -h
totalが総メモリ量、usedが使用中のメモリ量です。
そのため現在のメモリ使用率は「19%」となります。
メモリ使用率が80%を超えるようにするために、下記コマンドを入力します。
stress -m 1 --vm-bytes 700M --vm-hang 0 &
# バックグラウンドで起動するように「&」を付けています。
各オプション値は以下のようになります。
-m [ ]:起動するプロセス数
--vm-bytes [ ] :指定したメモリ量を確保する
--vm-hung [ ] :指定したメモリを確保する時間。0を指定するとメモリを確保し続ける。
コマンド入力後、再度freeコマンドでメモリ使用量を確認します。
メモリ使用量が増加しているのを確認できます。
使用率は「89%」となります。
CloudWatchアラームを確認すると、アラームが発報しています。
また、メールも正常に受信できています。
ディスク使用率検証
最後にディスク使用率を検証します。
まずはdfコマンドを使用して現在のディスク使用率を確認します。
その際オプションの「-h」を付けて単位を表示させます。
df -h
Use%が現在のディスク使用率です。現在は「25%」となっています。
ディスク使用率が80%を超えるようにするために、下記コマンドを入力します。
stress -d 1 --hdd-bytes 5G &
# バックグラウンドで起動するように「&」を付けています。
各オプション値は以下のようになります。
-d [ ]:起動するプロセス数
--hdd-bytes [ ] :指定したディスク容量を確保する
コマンド入力後、再度dfコマンドでディスク使用率を確認します。
ディスク使用率が80%を超えていることを確認できます。
CloudWatchアラームを確認すると、アラームが発報しています。
また、メールも正常に受信できています。
まとめ
stressコマンドを使用することで、各アラームを発報させることができました。
yesコマンドやddコマンドを使用する方法もありますが、個人的には1種類のコマンドでカバーできる方が覚えることも少なくていいなと思ったので今回記事にしました。
サーバ負荷テスト時などを実施する機会があれば積極的に使っていきたいです。