.NET Core で使用できる診断ツール

ソフトウェアは期待どおりに動作するとは限りませんが、.NET Core には、そのような問題を迅速かつ効果的に診断するために役立つツールと API が用意されています。

この記事は、必要な各種ツールを見つけるために役立ちます。

デバッガー

デバッガーを使うと、プログラムと対話することができます。 一時停止、段階的な実行、調査、および再開によって、コードの動作を分析できます。 デバッガーは、簡単に再現できる機能の問題を診断するのに適した選択肢です。

単体テスト

単体テストは、高品質のソフトウェアを継続的に統合して展開するための重要なコンポーネントです。 単体テストは、何かを中断するときに早期警告を提供するように設計されています。

監視のためのインストルメンテーション

.NET は、メトリック、ログ、分散トレースを使った業界標準のインストルメンテーション手法をサポートしています。 インストルメンテーションは、ソフトウェア プロジェクトに追加され、実行内容を記録するコードです。 この情報は、ファイル、データベース、またはメモリ内に収集され、分析することでソフトウェア プログラムがどのように動作しているかを把握できます。 これは、運用環境で問題を監視し、診断するためによく使われます。 .NET ランタイムには、必要に応じて有効にすることができる組み込みインストルメンテーションと、アプリケーションに特化したカスタム インストルメンテーションを追加することができる API が用意されています。

メトリック

メトリックとは、アプリケーションのパフォーマンスと正常性を監視するために経時的に記録される数値測定値です。 メトリックは、潜在的な問題が検出された場合にアラートを生成するためによく使用されます。 メトリックはパフォーマンスのオーバーヘッドが非常に少なく、多くのサービスが常時接続のテレメトリとして構成しています。

ログ

ログ記録は、プログラムの実行中に発生した興味深いイベントの記録であるログを生成するためにコードがインストルメント化される手法です。 多くの場合、ログ イベントのベースライン セットは既定で構成され、より広範なログ記録をオンデマンドで有効にして、特定の問題を診断できます。 パフォーマンスのオーバーヘッドは、ログに記録されるデータの量によって異なります。

分散トレース

分散トレースは、複数のマシンやプロセスに分散したアプリケーション内の障害やパフォーマンス問題を特定するのに役立つ、ログ記録の特殊な形式です。 この手法は、アプリケーションを介して要求を追跡し、さまざまなアプリケーション コンポーネントによって実行される作業を相互に関連付けて、アプリケーションが同時要求に対して実行する可能性がある他の作業から分離します。 すべての要求をトレースすることが可能で、パフォーマンスのオーバーヘッドを抑制するために必要に応じてサンプリングを利用できます。

ダンプ

ダンプは、作成時のプロセスのスナップショットを含むファイルです。 これらは、デバッグのためにアプリケーションの状態を調べるのに役立ちます。

シンボル

シンボルは、ソース コードとコンパイラによって生成されるバイナリとの間のマッピングです。 これらは一般的に、ソースの行番号、ローカル変数名、その他の種類の診断情報などを解決するために .NET デバッガーによって使用されます。

コンテナーでの診断の収集

コンテナー化されていない Linux 環境で使用されているのと同じ診断ツールを使用して、コンテナーで診断を収集することもできます。 Docker コンテナーでツールを動作させるために必要ないくつかの使用方法が変更されています。

.NET Core 診断グローバル ツール

dotnet-カウンター

dotnet-カウンターは、第 1 レベルの正常性監視とパフォーマンス調査のためのパフォーマンス監視ツールです。 EventCounter API を使用して公開されたパフォーマンス カウンターの値を監視します。 たとえば、CPU 使用率や、.NET Core アプリケーションでスローされる例外の発生率などをすばやく監視できます。

dotnet-ダンプ

dotnet-ダンプ ツールは、ネイティブ デバッガーを使用せずに Windows と Linux のコア ダンプを収集して分析する方法です。

dotnet-gcdump

dotnet-gcdump ツールは、ライブ .NET プロセスの GC (ガベージ コレクター) ダンプを収集する手段です。

dotnet-トレース

.NET Core には、診断データが公開される EventPipe と呼ばれるものが含まれています。 dotnet-トレース ツールを使用すると、アプリから興味深いプロファイル データを使用できます。これは、アプリケーションの実行速度が低下する可能性のあるシナリオに役立ちます。

dotnet-stack

dotnet-stack ツールを使用すると、実行中の .NET プロセス内のすべてのスレッドのマネージド スタックをすばやく出力できます。

dotnet-symbol

dotnet-symbol によって、コア ダンプまたはミニダンプを開くために必要なファイル (シンボル、DAC/DBI、ホスト ファイルなど) をダウンロードできます。 別のコンピューターでキャプチャされたダンプ ファイルをデバッグするためにシンボルとモジュールが必要な場合は、このツールを使用します。

dotnet-sos

dotnet-sos によって、Linux と macOS に SOS デバッグ拡張機能 がインストールされます (Windbg/cdb を使用している場合は Windows でも)。

PerfCollect

PerfCollect は、Linux ディストリビューションで実行されている .NET アプリのより詳細なパフォーマンス分析を行うために perfLTTng でトレースを収集するために使用できる bash スクリプトです。

.NET Core 診断チュートリアル

独自の診断ツールを作成する

診断クライアント ライブラリを使用すると、診断シナリオに最適な独自のカスタム診断ツールを作成できます。 詳細については、Microsoft.Diagnostics.NETCore.Client API リファレンスを参照してください。

メモリ リークをデバッグする

チュートリアル: メモリ リークをデバッグするでは、メモリ リークを検出する手順について説明します。 リークを確認するには dotnet-counters ツールを使用し、リークを診断するには dotnet-dump ツールを使用します。

高い CPU 使用率をデバッグする

チュートリアル: 高い CPU 使用率をデバッグする に関するページに、高い CPU 使用率の調査方法が示されています。 高い CPU 使用率を確認するために、dotnet-counters ツールが使用されます。 次に、パフォーマンス分析ユーティリティ (dotnet-trace) 用のトレースまたは Linux perf を使用して、CPU 使用率プロファイルを収集および表示する手順について説明します。

デッドロックをデバッグする

チュートリアル: デッドロックのデバッグに関するページに、dotnet-dump ツールを使用してスレッドとロックを調査する方法が示されています。

ThreadPool の枯渇をデバッグする

チュートリアル: ThreadPool の枯渇をデバッグするでは、dotnet-countersdotnet-stack ツールを使って ThreadPool の枯渇を調査する方法について説明します。

スタック オーバーフローのデバッグ

チュートリアル: スタック オーバーフローのデバッグ」は、Linux で StackOverflowException をデバッグする方法を示します。

Linux ダンプのデバッグ

Linux ダンプのデバッグ」では、Linux でダンプを収集して分析する方法について説明します。

EventCounters を使用してパフォーマンスを測定する

チュートリアル: .NET で EventCounters を使用してパフォーマンスを測定する」は、EventCounter API を使用して .NET アプリのパフォーマンスを測定する方法を示します。