Apache JMeter は、さまざまなプロトコルとコントローラーに対応するパラメータ化、アサーション、拡張をサポートするオープンソースのストレステストツールであり、カスタムスクリプトを記述してパラメータ処理などのロジックを実装できます。Performance Testing Service (PTS) は、ネイティブの JMeter エンジンで JMeter スクリプトを実行し、水平スケーリングや Cloud Monitor との連携によって、高い同時実行性のテストとモニタリング診断を実現します。このトピックでは、PTS におけるネイティブ JMeter ストレステストのユースケースと、JMeter シナリオの作成、ストレステストの開始、およびストレステストレポートの操作方法について説明します。
ユースケース
PTS で JMeter シナリオを作成するのは、次のような状況です。
高い同時実行性:高い同時実行性での分散ストレステストが必要です。
リアルタイムの可観測性:ストレステスト中に秒単位のリアルタイムモニタリングが必要であり、ストレステスト後に自動的に生成されるストレステストレポートが必要です。
集中管理:JMeter スクリプトと JMeter 環境の依存関係を集中管理する必要があります。
制限
JMeter シナリオを作成する前に、次の制限を確認してください。
JMX スクリプトファイル:ファイルサイズは 2 MB を超えることはできません。複数の JMX スクリプトファイルをアップロードできますが、ストレステストに使用できる JMX スクリプトは 1 つだけです。
JAR ファイル:ファイルサイズは 10 MB を超えることはできません。JAR ファイルをアップロードする前に、オンプレミスの JMeter 環境でデバッグし、デバッグが通ることを確認してください。
CSV ファイル:ファイルサイズは 60 MB を超えることはできません。ファイルが 60 MB を超える場合は、OSS データソース機能を使用してファイルをインポートしてください。
ファイル数:JMX 以外のファイルの総数は 20 個までです。
ステップ 1:JMeter シナリオの作成
Create JMeter Scenario ページで、Scenario フィールドに名前を入力します。
Scenario Settings セクションで、JMeter 負荷テストスクリプトをアップロードします。ファイル名に空白文字を含めることはできず、拡張子は
jmxにする必要があります。JMX ストレステストファイルがアップロードされると、PTS は不足しているプラグインを自動的に補完します。
複数の JMX ファイルをアップロードする場合は、ストレステストシナリオの開始に使用する JMeter スクリプトとして 1 つの JMX ファイルを選択します。
[Upload File] をクリックして、CSV 形式のデータファイルや JAR 形式のプラグインなど、他のファイルをアップロードします。
重要同じ名前のファイルをアップロードすると、以前にアップロードされたファイルが上書きされます。 ファイルを比較するには、ファイルの アクション 列で MD5 値を取得し、ローカルファイルの MD5 値と比較してファイルが変更されたかどうかを確認します。
注意事項:
CSV ファイルを準備する際、XLSX ファイルの拡張子を直接変更しないでください。Excel や Numbers などのソフトウェアを使用してファイルをエクスポートしてください。プログラムによってファイルが生成される場合は、Apache Commons CSV を使用できます。
データファイルが JMX スクリプトに関連付けられている場合は、[CSV Data Set Config] の [Filename] をファイル名そのものに変更し、パスを含めないでください。そうしないと、データファイルが読み取れません。同様に、
__CSVRead関数を使用する場合や、JAR ファイル内でファイルを指定する場合も、ファイル名を使用する必要があります。
(任意) CSV ファイル内のデータが各ロードジェネレーターで重複しないようにするには、Split File を選択します。このオプションを選択しない場合、各ロードジェネレーターで同じデータが使用されます。
依存関係環境を使用するかどうかを選択します。
はい を選択した場合、環境管理で作成された環境を選択する必要があります。
不可 を選択した場合、JMeter バージョンを選択する必要があります。Apache JMeter 5.0 と Java 11 がサポートされています。
シナリオの負荷を設定します。
(オプション) クラウドリソースのモニタリングを追加します。モニタリングを追加することで、ストレステスト中およびストレステストレポートで対応するモニタリングデータを迅速に表示できます。この機能はデフォルトで無効になっています。設定するには、スイッチをオンにしてください。
(オプション) その他の情報を追加します。ここでストレステストの所有者と備考を追加できます。この機能はデフォルトで無効になっています。設定するには、スイッチをオンにしてください。
(オプション) 詳細設定を構成します。詳細設定には、ログサンプリングレートの設定、DNS 設定、および分散適応コンポーネントの設定が含まれます。詳細設定はデフォルトで無効になっています。設定するには、スイッチをオンにしてください。
次のタブでは、詳細設定が無効な場合に適用されるデフォルト値と、詳細設定が有効な場合に設定できる項目について説明します。
詳細設定が無効な場合
デフォルト設定が使用されます。
サンプリングログのサンプリングレートが
1に設定されている場合、料金は(1+rate)*native VUMとして計算されます。[Clear DNS Cache in Each Loop] スイッチはオフになり、システムの DNS リゾルバーが使用されます。
同期タイマと[Constant Throughput Timer]は、どちらも単一のジェネレーターで有効になります。
詳細設定が有効な場合
ログサンプリングレートの設定
ログのサンプリングレートをカスタマイズできます。デフォルトのサンプリングレートは 1% です。サンプリングレートを下げるには、
(0,1]の範囲の値を入力します。サンプリングレートを上げるには、20 など 10 で割り切れる(1,50]の範囲の値を入力します。1% を超えるサンプリングレートを指定した場合、
rate%の追加料金が請求されます。たとえば、サンプリングレートが 20% の場合、20%*VUMの追加料金が請求されます。DNS キャッシュ設定
各アクセスリクエストの DNS キャッシュをクリアするかどうかを選択できます。DNS キャッシュをクリアする必要がある場合は、システムの DNS リゾルバーまたはカスタム DNS リゾルバーを使用できます。次のようなシナリオでは、カスタム DNS リゾルバーが必要になる場合があります。
分散適応コンポーネントの設定
アップロードしたスクリプトにタイマーやコントローラーなどの分散適応コンポーネントが含まれている場合、複数の負荷ジェネレーター IP アドレスに対して分散適応を設定できます。これにより、より正確で効果的なパフォーマンステストを実行できます。スクリプトで設定された値が負荷ジェネレータークラスター全体のしきい値である場合は、[Takes effect globally] を選択します。スクリプトで設定された値が各負荷ジェネレーターのしきい値である場合は、[Single Generator] を選択します。デフォルトでは、両方のタイマーが単一のジェネレーターで有効になります。
Synchronous timer を設定します。アップロードする JMeter スクリプトにタイマーが含まれている場合、スクリプトで設定された値が グローバルに有効 になるか、Single Generator で有効になるかを選択する必要があります。
[Takes effect globally]:スクリプトで設定された値は、クラスター全体のしきい値です。この値は、使用される IP アドレスの数に基づいて、単一ジェネレーターのしきい値に分割されます。つまり、単一の負荷ジェネレーターのしきい値は、スクリプト内の値を IP アドレスの数で割った値になります。合計で 2 つの負荷ジェネレーター IP アドレスが使用され、スクリプトで設定された集約しきい値が 1,000 の場合、単一の負荷ジェネレーターのしきい値は 500 になります。
[Single Generator]:スクリプトで設定された値は、単一の負荷ジェネレーターのしきい値であり、スクリプトの内容は置き換えられません。この場合、同時実行数が設定値と一致するかどうかを確認してください。合計で 2 つの負荷ジェネレーター IP アドレスが使用され、スクリプトで設定されたしきい値が 1,000 の場合、単一の負荷ジェネレーターのしきい値は 1,000、負荷ジェネレータークラスター全体のしきい値は 2,000 になります。
Constant Throughput Timer を設定します。アップロードした JMeter スクリプトにコントローラーが含まれている場合、スクリプトで設定した値をグローバルに有効にするか、Single Generatorで有効にするかを選択する必要があります。
[Takes effect globally]:スクリプトで設定された値は、クラスター全体のしきい値です。この値は、使用される負荷ジェネレーター IP アドレスの数に基づいて、単一ジェネレーターのターゲットスループット値に分割されます。つまり、単一の負荷ジェネレーターのしきい値は、スクリプト内の値を IP アドレスの数で割った値になります。2 つの負荷ジェネレーター IP アドレスが使用され、同時実行数が 100、スクリプトにスレッドグループが 1 つしか含まれず、そのターゲットスループットが毎分 100 で、計算モードが現在のスレッドである場合、シナリオの毎分の合計ターゲットスループットは 2 × (同時実行ユーザー数 100/2) × (100/2) = 5,000 になります。
[Single Generator]:スクリプトで設定された値は、単一の負荷ジェネレーターのターゲット値であり、スクリプトの内容は置き換えられません。同時実行レベルが設定値と一致するかどうかを確認してください。2 つの負荷ジェネレーター IP アドレスが使用され、同時実行数が 100、スクリプトにスレッドグループが 1 つしか含まれず、そのターゲットスループットが毎分 100 で、計算モードが現在のスレッドである場合、シナリオの毎分の合計ターゲットスループットは 2 × (同時実行ユーザー数 100/2) × 100 = 10,000 になります。
ステップ 2:ストレステストの開始
Debug をクリックしてシナリオのデバッグページに移動し、設定が有効かどうかを確認します。 シナリオのデバッグでは、ネットワーク接続、プラグインの整合性、スクリプト設定の正確性などの問題が事前にチェックされ、負荷テストの開始が失敗するのを防ぎます。 詳細については、「シナリオのデバッグ」をご参照ください。
Save and Start をクリックします。注意 ページで、今すぐ実行 を選択し、The test is permitted and complies with the applicable laws and regulations. を選択して、[テストを開始] をクリックします。
実行中のストレステストのモニタリング
ストレステストの実行中に、JMeter シナリオのストレステストデータをモニタリングし、シナリオの速度調整などの操作を実行できます。
[Data]
次の表に、ストレステスト中に PTS が表示するデータを示します。
データ情報 | 説明 |
リアルタイム VUM | このストレステストで消費されたリソースの総数 (VUM 単位)。VUM は仮想ユーザー分を表します。 |
リクエスト成功率 (%) | すべての負荷ジェネレーターの統計期間内における、すべてのシナリオのリクエスト成功率です。 |
平均 RT (成功/失敗) | 成功 RT 平均 (ms):すべての成功したリクエストの平均 RT。失敗 RT 平均 (ms):すべての失敗したリクエストの平均 RT。 |
秒間トランザクション数 (TPS) | すべての負荷ジェネレーターの統計期間内の合計リクエスト数を時間 (秒) で割った値です。 |
[エラー数] | 異常なリクエストの数。一般的な原因には、接続タイムアウトやリクエストタイムアウトが含まれます。 |
[Traffic (Request/Response)/Seconds] | 負荷ジェネレーターが送信したリクエストのトラフィックと、受信したレスポンスのトラフィックです。 |
同時実行数 (現在/最大) | 負荷の同時実行数を指します。ストレス テスト中にシナリオの速度調整が設定されている場合、現在の同時実行数と設定された最大同時実行数は個別に表示されます。ウォームアップ フェーズでは、設定された同時実行数には達しません。ウォームアップが終了すると、同時実行数は設定値になります。ストレス テスト中にシナリオの同時実行数を調整するには、Speed Regulation をクリックし、必要な同時実行数を入力します。 |
総リクエスト数 | ストレステスト中にシナリオ全体から送信されたリクエストの総数です。 |
モニタリングデータは、バックエンドリスナーの単純な集計計算に基づいています。負荷ジェネレーターの統計サンプリング期間は 15 秒であり、データ集計と計算の期間も 15 秒です。そのため、データ遅延が発生する可能性があります。
[設定情報]
設定情報ページには、負荷ソース、設定された期間、トラフィックモデル、指定された IP アドレスの数など、シナリオ設定の基本情報が一覧表示されます。
ストレステスト情報
Testing Details タブで、単一トレースの右側にある[チャートを表示] をクリックすると、TPS、成功率、応答時間、トラフィックなどのリアルタイムデータを表示できます。
Load Generator Performance タブをクリックすると、ストレステスト中のすべての負荷ジェネレーターの CPU 使用率、Load5、メモリ使用率、およびネットワークトラフィックの時系列曲線などの情報を表示できます。 また、特定の負荷ジェネレーターのパフォーマンス情報を絞り込むこともできます。
ECS 監視、SLB 監視、RDS 監視、または ARMS 監視を追加した場合、Cloud Resource Monitoring タブをクリックして、関連する監視情報を表示できます。
サンプリングログの詳細
[Sampling Logs] タブを選択します。
ストレステストサンプラー、応答ステータス、RT 範囲などの条件でログをフィルタリングします。
対応するログのアクション列で、[詳細の表示]をクリックします。
ログの詳細 ダイアログボックスで、一般 タブのログフィールドとフィールド値を表示します。ダイアログボックスの右上隅で、表示形式を 一般 または HTTP プロトコル形式に切り替えます。
JMeter スクリプトでHTML ファイルからの埋め込みリソースが設定されている場合、ログ詳細にSub-request Details タブが表示されます。特定のサブリクエストを選択することで、対応するリクエストログを絞り込むことができます。
ログ詳細には、次のタブも用意されています。
Timing Waterfall タブには、リクエスト全体と各サブリクエストの所要時間が表示されます。
Trace View タブには、ストレス テスト中のエンドポイントの上流と下流のコールチェーン詳細が表示されます。
ステップ 3:ストレステストレポートの表示
ストレステストが停止すると、PTS はストレステスト中に生成されたデータを自動的に収集し、ストレステストレポートを作成します。レポートには、JMeter ストレステストシナリオの全体的な動的データと各リクエストの詳細が表示されます。
On the Reports page, select the JMeter scenario type. In the [アクション] column of the target report, click View Report.
トレンドチャートでは、各データポイントの統計サンプリング期間は 15 秒です。最終的なデータレポートの初期フェーズでは、データ遅延が発生する可能性があります。
(オプション) ステップ 4:ストレステストレポートのエクスポート
ストレステストレポートのデータは 30 日間保持されます。レポートを長期間保持する必要がある場合は、現在のストレステストレポートをローカルマシンにエクスポートしてください。
[レポート詳細] ページで、Export Report をクリックします。
[Version with Watermark] または [Version without Watermark] を選択して、ストレステストレポートを PDF ファイルとしてローカルマシンにダウンロードします。