Go 用 Application Real-Time Monitoring Service (ARMS) エージェントは、コンパイル時にオブザーバビリティを強化してアプリケーションパフォーマンスを管理しますが、これはある程度の性能オーバーヘッドをもたらします。ただし、ARMS チームは、アプリケーションの安定性を損なうことなく、エージェントの性能オーバーヘッドを削減するための多くの手法を採用しています。このテストレポートでは、トラフィックの異なるシナリオをシミュレートして、Go 用 ARMS エージェントの性能オーバーヘッドをテストします。アプリケーションをアプリケーションモニタリングに接続する前に、このレポートを参照して包括的な評価を行うことをお勧めします。
テストシナリオ
フローチャート
Net/HTTP で開発された Go アプリケーションは、Alibaba Cloud Performance Testing Service (PTS) から送信されたリクエストに基づいて MySQL と Redis にアクセスします。各タイプのリクエストは、1 秒あたりのクエリ数 (QPS) の 50% を占めます。
テスト環境
ストレステストのソースは PTS によって提供されます。
Go アプリケーション、MySQL、および Redis はすべて、同じ Alibaba Cloud Container Service for Kubernetes (ACK) クラスタにデプロイされています。ノードのインスタンスタイプは ecs.c6.2xlarge で、ノードのオペレーティングシステムバージョンは Alibaba Cloud Linux 3.2104 LTS 64 ビットです。
アプリケーションの各ポッドには、1 コア、2 GB のメモリ、および 2 つのレプリカがあります。
Go V1.0.0 用 ARMS エージェントを使用します。
テスト手順
500、1,000、および 2,000 QPS で 3 つのストレステストを実行します。各ストレステストは 1 時間続きます。各ストレステストの前に、Go アプリケーションを 100 QPS で 3 分間ウォームアップします。テスト結果は、ベースラインパフォーマンスメトリックとして使用されます。
Go 用 ARMS エージェントをインストールします。サンプリングポリシーでサンプリングレートを 10% に設定し、手順 1 のストレステストを繰り返して、Go アプリケーションの CPU オーバーヘッド、メモリオーバーヘッド、および応答時間の差異を比較します。
サンプリングポリシーでサンプリングレートを 100% に設定し、手順 1 のストレステストを繰り返して、Go アプリケーションの CPU オーバーヘッド、メモリオーバーヘッド、および応答時間の差異を比較します。
メトリック、トレース、ランタイムモニタリングなど、アプリケーションモニタリングの基本機能が有効になっています。すべてのプラグインも有効になっています。
ランタイムモニタリング機能により、CPU 使用率が 0.5% 増加します。アプリケーションのパフォーマンスが影響を受ける場合は、アプリケーション設定でランタイムモニタリングを無効にすることができます。
ベースラインパフォーマンスメトリック
項目 | CPU | メモリ | 応答時間(単位:ミリ秒) |
500 QPS | 2.42% | 0.71% | 30 |
1,000 QPS | 4.21% | 0.91% | 30 |
2,000 QPS | 8.5% | 1.41% | 30 |
CPU メトリックは、ポッドが使用した CPU の総 CPU に対する割合を表します。
メモリメトリックは、ポッドが使用したメモリの総メモリに対する割合を表します。ポッドによって使用されるメモリは、リクエスト値に達するまで自然に増加するため、レポートではストレステストの最後に実際のメモリ使用量を使用します。
応答時間メトリックは、リクエストの平均応答時間を表します。単位:ミリ秒。
Go 用 ARMS エージェントのパフォーマンスメトリック
項目 | 10% サンプリングレート | 100% サンプリングレート | ||||
CPU | メモリ | 応答時間(単位:ミリ秒) | CPU | メモリ | 応答時間(単位:ミリ秒) | |
500 QPS | 5.15% | 1.25% | 30 | 5.25% | 1.85% | 31 |
1,000 QPS | 8.42% | 1.52% | 31 | 10.48% | 2.02% | 32 |
2,000 QPS | 16.2% | 2.5% | 31 | 18.45% | 2.63% | 32 |
Go 用 ARMS エージェントの性能オーバーヘッド
項目 | 10% サンプリングレート | 100% サンプリングレート | ||||
CPU | メモリ | 応答時間(単位:ミリ秒) | CPU | メモリ | 応答時間(単位:ミリ秒) | |
500 QPS | +2.73% | +0.54% | - | +2.83% | +1.14% | +1 |
1,000 QPS | +4.21% | +0.61% | +1 | +6.27% | +1.11% | +2 |
2,000 QPS | +7.7% | +1.09% | +1 | +9.95% | +1.22% | +2 |
結論
Go 用 ARMS エージェントは CPU オーバーヘッドを 10% 以下に増加させ、メモリオーバーヘッドはほとんど増加させません。
Go 用 ARMS エージェントは応答時間への影響が小さく、2,000 QPS でわずか 1 ミリ秒増加します。
100% サンプリングレートでの性能オーバーヘッドは、10% サンプリングレートでの性能オーバーヘッドよりも 2% 大きくなります。