Application Real-Time Monitoring Service (ARMS) エージェントは、アプリケーションの実行中にバイトコードを拡張して、アプリケーションのパフォーマンスを管理します。バイトコード拡張によって実装される他のパフォーマンス管理ソリューションと同様に、Java 用 ARMS エージェントは、ある程度のパフォーマンスオーバーヘッドをもたらします。ただし、ARMS チームは、アプリケーションの安定性を損なうことなく、エージェントのパフォーマンスオーバーヘッドを削減するための多くの手法を採用しています。このテストレポートでは、トラフィックの異なるシナリオをシミュレートして、ARMS Java V3.x エージェントのパフォーマンスオーバーヘッドをテストします。アプリケーションをアプリケーションモニタリングに接続する前に、このレポートを参照して包括的な評価を行うことをお勧めします。
テストシナリオ
フローチャート
Spring MVC で開発された Java アプリケーションは、Alibaba Cloud Performance Testing Service (PTS) から送信されたリクエストに基づいて MySQL と Redis にアクセスします。${mall-gateway}/case/api/v1/mysql/execute リクエストの場合、アプリケーションは MySQL にアクセスします。${mall-gateway}/case/api/v1/redis/execute リクエストの場合、アプリケーションは Redis にアクセスします。各タイプのリクエストは、1 秒あたりのクエリ数 (QPS) の 50% を占めます。
テスト環境
ストレステストソースは PTS によって提供されます。
Java アプリケーション、MySQL、および Redis はすべて、同じ Alibaba Cloud Container Service for Kubernetes (ACK) クラスタにデプロイされています。ノードのインスタンスタイプは ecs.c6.2xlarge で、ノードのオペレーティングシステムバージョンは CentOS Linux release 7.9.2009 (Core) です。
アプリケーションの各ポッドには、2 コア、4 GB のメモリ、および 2 つのレプリカがあります。
Java 用 ARMS エージェントのバージョンは 3.1.4 です。
テスト手順
500、1,000、および 2,000 QPS で 3 つのストレステストを実行します。各ストレステストは 1 時間続きます。各ストレステストの前に、Java アプリケーションを 100 QPS で 3 分間ウォームアップします。テスト結果は、ベースラインパフォーマンスメトリックとして使用されます。
ARMS Java V3.1.4 エージェントをインストールします。サンプリングポリシーで 10% のサンプリングレートを設定し、手順 1 のストレステストを繰り返して、Java アプリケーションの CPU オーバーヘッド、メモリオーバーヘッド、および応答時間の差を比較します。
ARMS Java V3.1.4 エージェントをインストールします。サンプリングポリシーで 100% のサンプリングレートを設定し、手順 1 のストレステストを繰り返して、Java アプリケーションの CPU オーバーヘッド、メモリオーバーヘッド、および応答時間の差を比較します。
サンプリングポリシーの設定方法の詳細については、V3.2.8 より前の ARMS エージェントのトレースサンプリングモードを選択するを参照してください。
メトリック、トレース、分位数など、アプリケーションモニタリングの基本機能が有効になっています。すべてのプラグインも有効になっています。
ベースラインパフォーマンスメトリック
項目 | CPU | メモリ | 応答時間(単位:ミリ秒) |
500 QPS | 6.50% | 14.49% | 2 |
1,000 QPS | 17.01% | 14.86% | 2 |
2,000 QPS | 32.36% | 19.04% | 2 |
CPU メトリックは、ポッドによって使用される CPU の総 CPU に対する割合を表します。
メモリメトリックは、ポッドによって使用されるメモリの総メモリに対する割合を表します。ポッドによって使用されるメモリは、リクエスト値に達するまで自然に増加するため、レポートではストレステスト終了時の実際のメモリ使用量を使用しています。
応答時間メトリックは、リクエストの平均応答時間を表します。単位:ミリ秒。
ARMS Java V3.x エージェントのパフォーマンスメトリック
項目 | 10% サンプリングレート | 100% サンプリングレート | ||||
CPU | メモリ | 応答時間(単位:ミリ秒) | CPU | メモリ | 応答時間(単位:ミリ秒) | |
500 QPS | 7.72% | 18.37% | 2 | 7.90% | 18.83% | 2 |
1,000 QPS | 19.94% | 18.95% | 2 | 20.78% | 19.61% | 2 |
2,000 QPS | 40.49% | 25.69% | 3 | 42.25% | 25.80% | 3 |
ARMS Java V3.x エージェントのパフォーマンスオーバーヘッド
項目 | 10% サンプリングレート | 100% サンプリングレート | ||||
CPU | メモリ | 応答時間(単位:ミリ秒) | CPU | メモリ | 応答時間(単位:ミリ秒) | |
500 QPS | +1.21% | +3.88% | - | +1.39% | +4.35% | - |
1,000 QPS | +2.92% | +4.09% | - | +3.76% | +4.75% | - |
2,000 QPS | +8.13% | +6.66% | +1 | +9.89% | +6.76% | +1 |
結論
ARMS Java V3.x エージェントによって引き起こされる追加の CPU およびメモリオーバーヘッドは 10% 以内です。
ARMS Java V3.x エージェントは応答時間への影響が小さく、2,000 QPS で 1 ミリ秒しか増加しません。
100% 固定サンプリングレートでのパフォーマンスオーバーヘッドは、10% 固定サンプリングレートでのパフォーマンスオーバーヘッドよりもわずかに大きくなります。