Application Real-Time Monitoring Service(ARMS)エージェントは、実行時のアプリケーションに継続プロファイリング技術を提供します。他のデータ収集ツールと同様に、この技術は一定レベルのパフォーマンス オーバーヘッドを発生させます。ただし、ARMS はこのオーバーヘッドを最小限に抑え、安定したアプリケーション動作を保証するために、いくつかの最適化手法を実装しています。このテスト レポートでは、実際の使用シナリオをシミュレートし、さまざまなビジネストラフィック条件下で継続プロファイリングによって発生するパフォーマンス オーバーヘッドをテストします。継続プロファイリングを利用する前に、このレポートを参照してパフォーマンスへの影響を徹底的に評価できます。
テスト シナリオ
フローチャート:
Spring MVC で開発された Java アプリケーションは、Alibaba Cloud Performance Testing(PTS)から送信されたリクエストに基づいて MySQL と Redis にアクセスします。${mall-gateway}/case/api/v1/mysql/execute リクエストの場合、アプリケーションはリクエストごとに 1 ~ 4 回 MySQL にアクセスします。${mall-gateway}/case/api/v1/redis/execute リクエストの場合、リクエストごとに 1 ~ 10 回 Redis にアクセスします。各リクエスト タイプは、1 秒あたりのクエリ数(QPS)の 50% を占めます。
テスト環境
ストレステストのソースは PTS によって提供されます。
Java アプリケーション、MySQL、および Redis はすべて、同じ Alibaba Cloud Container Service for Kubernetes(ACK)クラスターにデプロイされています。ノード インスタンス タイプは ecs.u1-c1m2.8xlarge で、Alibaba Cloud Linux 2.1903 LTS 64 ビットを実行しています。
アプリケーション ポッドは、2 コア、4 GB のメモリ、およびそれぞれ 2 つのレプリカで構成されています。
Java v4.2.1 用 ARMS エージェントが使用されています。
テスト手順
ARMS エージェントをインストールします。サンプリング レートを 10% に設定します。500、1,000、2,000 QPS で 3 つのストレステストを実行します。各ストレステストの期間は 1 時間です。各ストレステストの前に、50 QPS で 5 分間 Java アプリケーションをウォームアップします。次に、アプリケーションを 30 分間実行します。すべてのメトリックが安定したら、すべての継続プロファイリング機能(CPU 診断、メモリ診断、コード診断を含む)を動的に有効にし、アプリケーションをさらに 30 分間実行し続けます。継続プロファイリングを有効にする前後のアプリケーションのさまざまなパフォーマンス メトリック(CPU オーバーヘッド、メモリ オーバーヘッド、応答時間)の差を観察します。
エージェントを有効にし、サンプリング レートを 100% に設定して、手順 1 のストレステストを繰り返します。アプリケーションの CPU オーバーヘッドとメモリ オーバーヘッド、および応答時間を比較します。
継続プロファイリングなしのパフォーマンス メトリック データ
項目 | 10% サンプリング レート | 100% サンプリング レート | ||||
CPU | メモリ | 応答時間 | CPU | メモリ | 応答時間 | |
500 QPS | 8.112% | 13.52% | 55.5 ms | 8.416% | 13.62% | 56.5 ms |
1000 QPS | 15.247% | 14.14% | 62.9 ms | 15.614% | 14.42% | 65.3 ms |
2000 QPS | 30.550% | 14.64% | 70.6 ms | 30.945% | 14.67% | 71.1 ms |
継続プロファイリングありのパフォーマンス メトリック データ
項目 | 10% サンプリング レート | 100% サンプリング レート | ||||
CPU | メモリ | 応答時間 | CPU | メモリ | 応答時間 | |
500 QPS | 8.912% | 15.52% | 55.6 ms | 9.316% | 15.71% | 56.6 ms |
1000 QPS | 17.140% | 16.24% | 63.0 ms | 17.710% | 16.82% | 65.4 ms |
2000 QPS | 34.650% | 16.84% | 70.7 ms | 35.245% | 16.89% | 71.3 ms |
継続プロファイリングのパフォーマンス オーバーヘッド
項目 | 10% サンプリング レート | 100% サンプリング レート | ||||
CPU | メモリ | 応答時間 | CPU | メモリ | 応答時間 | |
500 QPS | +0.80% | +2.00% | +0.1 ms | +0.90% | +2.09% | +0.1 ms |
1000 QPS | +1.893% | +2.10% | +0.1 ms | +2.096% | +2.40% | +0.1 ms |
2000 QPS | +4.10% | +2.20% | +0.1 ms | +4.30% | +2.22% | +0.2 ms |
結論
すべての継続プロファイリング機能を有効にすると、CPU オーバーヘッドとメモリ オーバーヘッドは 5% 以内になります。コード診断など、特定の機能のみを有効にすると、オーバーヘッドはさらに減少します。
継続プロファイリングは、アプリケーションのレイテンシにわずかな影響を与えます。継続プロファイリングを有効にする前後の一般的なストレス条件下では、応答時間に大きな変化は見られません。