はじめに
この記事はエムスリーキャリア FY22 AdventCalendarの5日目の記事です。
2023/10/03追記: DLTの日本語ワークショップの情報など
こちらのページ に2023/10時点の最新の情報が紹介されています。
日本語のワークショップも紹介もされています。
使用するAWSソリューション
前提:分散負荷試験ツールにおける負荷試験の流れ
上記ツールを用いた負荷試験の基本的な流れは、下記のDeveloperIOの記事が良いです。負荷状況によっては、AWSへの事前申請も必要なのをお忘れなく。
v2.0.0現在の追加の設定項目
現在の最新版ではありませんが、上述のDeveloperIOの記事より新しいv2.0.0が出たので、設定項目変わっていると思います。
注意事項は下記の2点です。
- subnetは ALBにアクセスできる private subnet を用意し、指定してください。(負荷をかけるコンテナが起動するsubnetです)
- CloudFormation用に新しくIAM Roleを作る必要があります。
- 信頼できるエンティティ: cloudformation.amazonaws.com を指定し、AdministratorAccessのポリシーをアタッチしたIAM Roleを用意しておけば良いです。
負荷試験の設計、パラメータの計算
適切な負荷をかけるまでの手順
(前提)私たちの場合、テスト対象のシステムはRuby on Rails(RackサーバはUnicorn)のものでした。また、リバースプロキシにnginxを使用しています。この構成以外でも同じ手順が使えるとは思いますが、何か変えた方が良いかもしれない場合がある点、ご留意ください。
既にシステムが稼働しているなら、ピーク時間帯の1分あたりのリクエスト数から秒間スループットを推定し、同時接続数(Concurrency * Taskの値)を推定します。
その後、パラメータを仮に指定してみて、短時間(マニュアルによればRAMP UP 最低5分くらい。でも実際には1〜2分くらいでやってた。HOLD ONは5〜15分くらい)の負荷試験を実行します。そして、意図通りの負荷がかかっているかどうか、リクエスト数やレスポンスタイム、スループットなどから確認します。
その際、負荷試験用のECSクラスターについて、「Container Insight>パフォーマンスのモニタリング」から確認し、CPU使用率が最大75% 以下、メモリ使用率が最大85%以下であることを確認してください。それ以上になっていたら負荷がかけきれていません。また、リアルタイムの負荷状況は、負荷試験ツールのテスト詳細画面からCloudWatchのリンクがあるので、そこからレスポンスタイムやVirtualUser数などが確認できます。
私は、1 taskに10以上のconcurrencyを設定すると、負荷をかける側のコンテナのスペックが足りなくて、負荷がかけきれずエラーになるケースがありました。経験則ですが、1 taskには4Concurrencyくらいは少なくとも指定して問題なさそうです(標準では2vCPUなのでハイパースレッディング加味すると論理コア数が4つなので。)。
上記の確認をしながらパラメータを調整し、短期間動かすということを繰り返し、負荷試験の調整を行ってください。
短期間で調整し終わったら、50〜60分の試験をやってみてください。改めて、CPUやメモリの使用率を確認してみてください。
参考資料
同時接続数などのパラメータの決め方については、下記のドキュメントも参照してください。
このAWSのドキュメントは、下記のドキュメントを抜粋したものなので、より詳細な手順を知りたい場合は下記のドキュメントを参照してください。
複数の負荷試験シナリオを実行する
負荷試験ツールで複数のTestを作成し、それを手動で同時に実行させてください。
JMeterでテストシナリオを記述する場合、Test Planもそれぞれファイルを分けて作成しアップロードしてください。
負荷試験ツールの1つのTestでは、JMeterの1つのThreadGroupの試験しか実行されません。
JMeterでテストシナリオを作る
JMeterをbrewでインストールした場合の注意
起動したら初めに「Options > Look&Feel」をSystemなど、Darklaf 系以外の適当なものに変更してください。でないとファイルが保存できないなど、機能が使えません。(クラスが不足している模様)
上記AWSソリューションでJMeterのJDBCの負荷試験を行う場合
JMeterのTestPlanの設定で、JDBC Driverのパスを /bzt-configs/foobar.jar
のように設定する。合わせて、ホスト名、DB名、ユーザ名、パスワードも正しく設定する。
そして、JMeterのjmx ファイルとJDBCドライバをまとめてzipファイルする。
その後、分散負荷ツールの画面から、テストを作成してJMeterのテストを実行するように設定してからzipをアップロードし、テストを実行します。