アプリケーションのパフォーマンスに関する問題の診断は、特にダイナミック クラウド内の運用環境で実行されている場合には、困難になることがあります。 アプリケーションの応答が遅いのは、インフラストラクチャ、フレームワーク、またはパイプライン内の要求を処理するアプリケーション コードに原因があるかもしれません。
Azure Application Insights の AI ベースのサービスであるコード最適化は、Application Insights Profiler for .NET と連携して、コード レベルで CPU とメモリ使用量のパフォーマンス問題を検出し、その修正方法に関する推奨事項を提供します。
運用環境から収集されたリアルタイムのパフォーマンス データと分析情報を使用し、情報を得た上で意思決定し、コードを最適化します。
.NET 用のコードの最適化と Application Insights Profiler
.NET Profiler とコード最適化は連携して、パフォーマンス問題を検出するための包括的なアプローチを提供します。
コード最適化
コードの最適化は 、Application Insights Profiler for .NET によって収集されたプロファイリング データを識別、分析、および解決します。 .NET Profiler が Application Insights にデータをアップロードすると、機械学習モデルはデータの一部を分析して、アプリケーションのコードを最適化できる場所を見つけます。 コード最適化では、以下を行います。
- 時間の経過に伴って収集された集計データを表示します。
- アプリケーション コード内のメソッドと関数にデータを結びつけます。
- コード内のボトルネックを見つけることで、原因を絞り込みます。
- 分析情報に基づくコード レベルのパフォーマンス修正を提供します。
識別
コード最適化の統合概要ページを使用すると、Azure Portal で Azure サブスクリプションと Application Insights リソース全体のすべてのコード最適化に関する推奨事項を確認できます。 コード内のボトルネックを特定し、開発、テスト、実稼働前、運用環境のコード レベルの推奨事項を確認します。
分析する
環境のデータが収集されると、コード最適化によって 1 時間ごとにコード レベルの推奨事項が提供されます。 既定では、集計されたデータ ビューには、最近特定された問題の 24 時間のローリング ウィンドウと、過去のイベントを確認および分析するための 30 日間の履歴が表示されます。
解決する
コード最適化の結果を特定して分析した後、コードの最適化 Visual Studio と Visual Studio Code 拡張機能を使用して、コードでこれらの問題を解決できます。 これらの拡張機能を使用して、GitHub Copilot と対話して、Code Optimizations の分析情報に記載されたコード修正を受け取ります。
Azure portal の [コードの最適化] ページから GitHub の問題を作成し、 GitHub Copilot コーディング エージェントに割り当てることもできます。 そこから、GitHub Copilot がプル要求を開き、コード最適化の分析情報に基づいてコード変更コミットをプッシュします。
デモ ビデオ
Application Insights Profiler for .NET
.NET Profiler では、特定の要求をミリ秒単位でトレースすることに重点を置いています。 アプリケーション内の問題の優れた "全体像" のビューと、それらに対処するための一般的なベスト プラクティスが提供されます。
.NET 用の Application Insights Profiler を使用すると、シナリオに関係なく、Azure で実行されているアプリケーションのパフォーマンス トレースをキャプチャ、識別、および表示できます。 .NET Profiler トレース プロセスは自動的かつ大規模に行われ、ユーザーに悪影響を与えることはありません。 .NET Profiler は以下を特定します。
- 顧客が行った各 Web 要求に対する応答時間の中央値、最速時間、最も遅かった時間。
- "ホットな" コード パスは特定の Web 要求の処理に最も長い時間を費やしています。
すべての Azure アプリケーションで Profiler for .NET を有効にして、次のトリガーを使用してデータを収集します。
- サンプリング トリガー: 1 時間に約 1 回、Profiler を 2 分間ランダムに起動します。
- CPU トリガー: CPU 使用率が 80% を超えると Profiler を起動します。
- メモリ トリガー: メモリ使用量が 80% を超えると Profiler を起動します。
これらの各トリガーは、構成、有効化、無効化することができます。
コストとオーバーヘッド
コードの最適化は、 Application Insights Profiler for .NET が有効になった後に自動的に生成されます。 既定では、Profiler は、1 時間ごとに 30 秒間、または CPU かメモリの使用率が高い時間中に 30 秒間という頻度でアクティブにトレースを収集します。 1 時間ごとのトレース (サンプリングと呼ばれます) はプロアクティブ チューニングに適していますが、高い使用率の CPU とメモリによるトレース (トリガーと呼ばれます) はリアクティブなトラブルシューティングに役立ちます。
注
Application Insights Profiler for .NET がアクティブに実行されトレースを収集している場合、通常、サーバーでは CPU とメモリのオーバーヘッドが 5% から 15% の間で増加します。
.NET Profiler によって取り込まれたデータの保存には、追加料金はかかりません。 データは 15 日後に自動的に削除されます。
一部のコード最適化機能 (コード レベルの修正候補など) には、 GitHub 用の Copilot や Azure 用の Copilot が必要です。
.NET Profiler の有効化
フレームワークと Azure サービスが進化するにつれて、さまざまなオプションを使用して、Azure で実行されている .NET アプリに対して .NET Profiler を有効にすることができます。
Azure サービス | 有効にする方法 | 詳細 |
---|---|---|
ほとんどの Azure サービス | アプリケーションのコード変更 (最も普遍的) |
.NET アプリが Azure PaaS サービスまたはコンテナーのバリアントで実行されている場合は、.NET Profiler を有効にする 2 つのオプションから選択できます。 - Application Insights SDK を使用する Application Insights Profiler for ASP.NET Core、または - 新しいAzure Monitor OpenTelemetry Profiler for NET (プレビュー) は、Azure Monitor OpenTelemetry Distro を使用します。 |
Azure App Service | アプリケーションのコード変更なし | Profiler はプレインストールされているため、ポータルで次の目的で Profiler for .NET を有効にすることができます。 - Azure App Service - Windows 上の .NET アプリ - Azure Functions - App Service プラン |
Virtual Machines | アプリケーションのコード変更なし | アプリケーション コードで Application Insights SDK を有効にしたら、ARM テンプレートで Profiler for .NET を有効にすることができます。 - Windows 用の Azure Virtual Machines と仮想マシン スケール セット - Azure Service Fabric |
Profiler for .NET を有効にするための詳細と例
- Azure App Service - Windows 上の .NET アプリ
- Azure App Service - Linux 上の .NET アプリ
- コンテナー:
- Azure コンテナー アプリ
- Azure Kubernetes Services
- Azure Container Instances (アジュール コンテナー インスタンス)
- Azure Virtual Machines と Virtual Machine Scale Sets (Windows)
- Azure Functions - App Service プラン
- Azure Service Fabric
注
Java Profiler for Azure Monitor Application Insights (現在プレビュー段階) も使用できます。
サポートされているリージョン
コード最適化は、Application Insights と同じリージョンで使用できます。 次のコマンドを使用して、使用可能なリージョンを確認できます。
az account list-locations -o table
接続文字列を使用して明示的なリージョンを設定できます。 接続文字列とその例に関する詳細情報。
制限事項
Web アプリのプロファイリング:
- .NET Profiler は追加コストなしで使用できますが、Web アプリは少なくとも Azure App Service の Web Apps 機能の Basic レベルでホストされている必要があります。
- 各 Web アプリにアタッチできるプロファイラーは 1 つだけです。
トラブルシューティング
プロファイラー
Profiler for .NET を有効にしているが、トレースが表示されない場合は、トラブルシューティング ガイドを参照してください。
コードの最適化
問題が発生していますか? シナリオ ソリューションについては、 コード最適化のトラブルシューティング ガイド を参照してください。
次のステップ
Azure サービスでコード最適化を使用して .NET Profiler を有効にする方法について説明します。