Application Real-Time Monitoring Service (ARMS) エージェントは、実行時にバイトコードインスツルメンテーションを行い、アプリケーションのパフォーマンスを監視します。他のバイトコードインスツルメンテーションベースの監視ソリューションと同様に、ARMS Agent for Java はパフォーマンスオーバーヘッドをもたらします。このレポートでは、さまざまなトラフィックレベルのシナリオをシミュレートし、ARMS Agent for Java V5.x のパフォーマンスオーバーヘッドを測定します。アプリケーションをアプリケーションモニタリングに接続する前に、このレポートを参照してパフォーマンスへの影響を評価してください。
テストシナリオ
次の図は、全体的なアーキテクチャを示しています。
Java アプリケーションは Spring Web model-view-controller (MVC) で開発されており、Alibaba Cloud Performance Testing (PTS) から送信されたリクエストに基づいて、Druid および Jedis フレームワークを介して MySQL と Redis にアクセスします。
${mall-gateway}/case/api/v1/mysql/executeリクエストを受信すると、アプリケーションは MySQL にアクセスします。このリクエストを受信するたびに、アプリケーションは MySQL に 1〜4 回アクセスします。${mall-gateway}/case/api/v1/redis/executeリクエストを受信すると、アプリケーションは Redis にアクセスします。このリクエストを受信するたびに、アプリケーションは Redis に 1〜10 回アクセスします。
テスト環境
負荷テストのソースには、PTS を使用します。
Java アプリケーション、MySQL、および Redis はすべて、同じ Alibaba Cloud Container Service for Kubernetes (ACK) クラスターにデプロイされています。ノードのインスタンスタイプは ecs.u1-c1m2.8xlarge で、ノードのオペレーティングシステムバージョンは Alibaba Cloud Linux 2.1903 LTS 64 ビットです。
アプリケーションの各 Pod は、2 コア、4 GB のメモリ、および 2 つのレプリカを備えています。JVM パラメーターは次のとおりです:
-Xms3500m -Xmx3500m -XX:MetaspaceSize=500mARMS Agent for Java のバージョンは Aliyun JavaAgent 5.1.2 です。
アプリケーションモニタリングの基本機能 (メトリック、トレース、クォンタイルなど) は有効です。すべてのプラグインも有効です。テスト中は、トレース圧縮、URL 収束、データマスキング、継続的プロファイリングなどの一部の高度な機能は無効です。
操作手順
500、1,000、2,000 QPS で 3 回の負荷テストを実施します。各負荷テストは 1 時間継続します。各負荷テストの前に、100 QPS で 3 分間 Java アプリケーションをウォームアップします。このテスト結果を、ベースラインパフォーマンスメトリックとして使用します。
ARMS Agent for Java V5.x をインストールします。サンプリングポリシーで 10% のサンプリングレートを設定し、ステップ 1 の負荷テストを繰り返して、Java アプリケーションの CPU オーバーヘッド、メモリオーバーヘッド、レスポンスタイムの違いを比較します。
ARMS Agent for Java V5.x をインストールします。サンプリングポリシーで 100% のサンプリングレートを設定し、ステップ 1 の負荷テストを繰り返して、Java アプリケーションの CPU オーバーヘッド、メモリオーバーヘッド、レスポンスタイムの違いを比較します。
サンプリングポリシーの設定方法の詳細については、「3.2.8 より前のエージェントのトレースサンプリングモード」をご参照ください。
ARMS アプリケーションモニタリングの基本機能 (統計メトリック、トレース、クォンタイルなど) とすべてのプラグイン機能は有効です。ただし、トレース圧縮、URL 収束、データマスキング、継続的プロファイリングなど、一部の高度な機能は一時的に無効です。
ベースラインパフォーマンスメトリック
項目 | CPU | メモリ | レスポンスタイム (ms) |
500 QPS | 6.752% | 11.48% | 57.8 |
1,000 QPS | 13.112% | 11.78% | 64.1 |
2,000 QPS | 26.910% | 12.22% | 70.8 |
CPU メトリックは、Pod が使用する CPU の合計 CPU (2 コア) に対する割合を示します。
メモリメトリックは、Pod が使用するメモリの合計メモリに対する割合を示します。Pod が使用するメモリは requests 値に達するまで自然に増加するため、このレポートでは負荷テスト終了時の実際のメモリ使用量を使用します。
レスポンスタイムメトリックは、リクエストの平均レスポンスタイムを示します。単位はミリ秒です。
ARMS エージェントをインストールした場合の絶対パフォーマンスメトリック
項目 | CPU (10% サンプリングレート) | メモリ (10% サンプリングレート) | レスポンスタイム (ms) (10% サンプリングレート) | CPU (100% サンプリングレート) | メモリ (100% サンプリングレート) | レスポンスタイム (ms) (100% サンプリングレート) |
500 QPS | 8.492% | 13.66% | 58.6 | 9.392% | 13.83% | 59.0 |
1,000 QPS | 16.932% | 14.07% | 65.2 | 18.072% | 14.33% | 65.6 |
2,000 QPS | 35.120% | 14.61% | 75.1 | 35.930% | 14.64% | 76.2 |
CPU オーバーヘッドは、サンプリングレートや QPS と線形にスケールするわけではありません。デフォルトでは、1 秒あたりのトレース収集に上限があります。
ARMS Agent for Java V5.x のパフォーマンスオーバーヘッド
項目 | CPU (10% サンプリングレート) | メモリ (10% サンプリングレート) | レスポンスタイム (ms) (10% サンプリングレート) | CPU (100% サンプリングレート) | メモリ (100% サンプリングレート) | レスポンスタイム (ms) (100% サンプリングレート) |
500 QPS | +1.74% | +2.18% | +0.8 | +2.64% | +2.35% | +1.2 |
1,000 QPS | +3.82% | +2.29% | +1.1 | +4.96% | +2.55% | +1.5 |
2,000 QPS | +8.21% | +2.39% | +4.3 | +9.02% | +2.42% | +5.4 |
結論
ARMS Agent for Java V5.x による追加の CPU およびメモリオーバーヘッドは 10% 未満です。
ARMS Agent for Java V5.x はレスポンスタイムへの影響が小さく (10% 未満)、QPS が 1,000 の場合、10% のサンプリングレートで約 1.1 ミリ秒、100% のサンプリングレートで約 1.5 ミリ秒増加します。
100% の固定サンプリングレートでのパフォーマンスオーバーヘッドは、10% の固定サンプリングレートの場合よりも若干大きくなります。
これらの結果は、上記で説明したテスト条件に基づいており、テスト中に特定の高度な機能は無効にしています。