Application Real-Time Monitoring Service (ARMS) エージェントは、アプリケーションの実行中にバイトコードを拡張して、アプリケーションのパフォーマンスを管理します。バイトコード拡張によって実装される他のパフォーマンス管理ソリューションと同様に、Java向けARMSエージェントは、ある程度のパフォーマンスオーバーヘッドをもたらします。ただし、ARMSチームは、アプリケーションの安定性を損なうことなく、エージェントのパフォーマンスオーバーヘッドを削減するための多くの手法を採用しています。このテストレポートでは、トラフィックの異なるシナリオをシミュレートして、Java V4.x向けARMSエージェントのパフォーマンスオーバーヘッドをテストします。アプリケーションをアプリケーションモニタリングに接続する前に、このレポートを参照して包括的な評価を行うことをお勧めします。
テストシナリオ
フローチャート
Spring MVCで開発されたJavaアプリケーションは、Alibaba Cloud Performance Testing (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.u1-c1m2.2xlargeで、ノードのオペレーティングシステムバージョンはCentOS Linux release 7.9.2009 (Core)です。
アプリケーションの各ポッドには、2コア、4GBのメモリ、および2つのレプリカがあります。
Java向けARMSエージェントのバージョンは4.1.11です。
テスト手順
500、1,000、および2,000 QPSで3つのストレステストを実行します。各ストレステストは1時間続きます。各ストレステストの前に、Javaアプリケーションを100 QPSで3分間ウォームアップします。テスト結果は、ベースラインパフォーマンスメトリックとして使用されます。
Java V4.1.11向けARMSエージェントをインストールします。サンプリングポリシーで10%のサンプリングレートを設定し、手順1のストレステストを繰り返して、JavaアプリケーションのCPUオーバーヘッド、メモリオーバーヘッド、および応答時間の違いを比較します。
Java V4.1.11向けARMSエージェントをインストールします。サンプリングポリシーで100%のサンプリングレートを設定し、手順1のストレステストを繰り返して、JavaアプリケーションのCPUオーバーヘッド、メモリオーバーヘッド、および応答時間の違いを比較します。
サンプリングポリシーの設定方法の詳細については、ARMSエージェントV3.2.8以降のトレースサンプリングモードを選択するを参照してください。
メトリック、トレース、分位数など、アプリケーションモニタリングの基本機能が有効になっています。すべてのプラグインも有効になっています。
ベースラインパフォーマンスメトリック
項目 | CPU | メモリ | 応答時間(単位:ミリ秒) |
500 QPS | 5.9% | 12.1% | 57.4 |
1,000 QPS | 11.1% | 12.3% | 63.2 |
2,000 QPS | 20.9% | 12.7% | 70.3 |
CPUメトリックは、ポッドが使用しているCPUの合計CPU(2コア)に対する割合を表します。
メモリメトリックは、ポッドが使用しているメモリの合計メモリに対する割合を表します。ポッドによって使用されるメモリは、リクエスト値に達するまで自然に増加するため、レポートではストレステストの終了時の実際のメモリ使用量を使用しています。
応答時間メトリックは、リクエストの平均応答時間を表します。単位:ミリ秒。
Java V4.x向けARMSエージェントのパフォーマンスメトリック
項目 | 10%サンプリングレート | 100%サンプリングレート | ||||
CPU | メモリ | 応答時間(単位:ミリ秒) | CPU | メモリ | 応答時間(単位:ミリ秒) | |
500 QPS | 7.5% | 14.8% | 58.1 | 8.9% | 15.2% | 58.2 |
1,000 QPS | 14.6% | 15.3% | 64.6 | 15.5% | 15.9% | 64.8 |
2,000 QPS | 27.3% | 16.7% | 74.2 | 27.8% | 17.4% | 75.8 |
サンプリングレートとCPUおよびQPSの両方との関係は非線形です。デフォルトでは、1秒あたりのトレース収集に上限があります。
Java V4.x向けARMSエージェントのパフォーマンスオーバーヘッド
項目 | 10%サンプリングレート | 100%サンプリングレート | ||||
CPU | メモリ | 応答時間(単位:ミリ秒) | CPU | メモリ | 応答時間(単位:ミリ秒) | |
500 QPS | +1.6% | +2.7% | +0.7 | +3.0% | +3.1% | +0.8 |
1,000 QPS | +3.5% | +3.0% | +1.4 | +4.4% | +3.6% | +1.6 |
2,000 QPS | +6.4% | +4.0% | +3.9 | +6.9% | +4.7% | +5.5 |
結論
Java V4.x向けARMSエージェントによって引き起こされる追加のCPUおよびメモリオーバーヘッドは10%以内です。
Java V4.x向けARMSエージェントは応答時間(10%)への影響が小さく、1,000 QPSでは1ミリ秒しか増加しません。
100%の固定サンプリングレートでのパフォーマンスオーバーヘッドは、10%の固定サンプリングレートでのパフォーマンスオーバーヘッドよりもわずかに大きくなります。