プロファイル エラーのトラブルシューティングと問題の修正
この記事では、Visual Studio でパフォーマンス プロファイラーのデータを使用できない、または取得できない最も一般的なエラーの解決方法について説明します。
結果なし
エラー: "There is no data in the current set of filters" (現在のフィルター セットにはデータがありません)
diagsession ファイルを開くと、トレースを理解しやすくするために、ネイティブ コードを非表示にする、非ユーザー コードを非表示にするなど、特定のフィルターが適用されます。 さらに、時間選択やスレッドなど、表示されるデータをさらに絞り込む他のフィルターが適用されます。 これらのフィルターを適用した結果、表示するデータが残っていない場合、この警告が表示されます。
修正方法
- 時間選択にデータがあることを確認します。 データの上にあるグラフの時間選択を変更した場合は、[選択のクリア] を選んでリセットしてください。
- 次に、それでもデータがない場合は、すべてのカテゴリとスレッドがそれぞれのドロップダウンで有効なことを確認します。
- プロファイルするアプリケーションがネイティブ コードである場合、必ず [設定] ドロップダウンで [ネイティブ コードを表示する] オプションを有効にします。
- それでもデータがない場合は、収集したトレースが短すぎてデータが存在しない可能性があります。 データを収集しているプログラムが完了するまでの時間が短すぎない (1 秒未満でない) ことを確認します。
関連項目: 外部コードの表
結果が完了するまでに長い時間がかかる
収集後のヒープの分析で読み込みが遅いと思われる場合は、待機時間の問題を解決できる可能性のある次の解決方法を参照してください。
修正方法: メモリを大量に消費するアプリケーションのスナップショットを分析しようとすると時間がかかることがありますが、Visual Studio を最新バージョンにアップグレードすると、分析の待機時間が短縮されます。 アップグレードしてもこの問題が解決しない場合は、ツールにパフォーマンスのバグが存在する可能性があります。 フィードバック チケットを作成し、作成された diagsession ファイルを共有します。 このファイルがあれば、データの分析に時間がかかる原因を特定し、パフォーマンスを改善できる場所を見つけることができます。
フィードバック チケットでは、必ずトレース ファイルとヒープ ダンプ ファイルを提供してください。
関連項目:
エラー "Could not create a manifest file for this diagsession" (この diagsession のマニフェスト ファイルを作成できませんでした) または "error could not create manifest file for diagsession, Visual Studio will not able to reopen this session." (エラーにより、diagsession のマニフェスト ファイルを作成できませんでした。Visual Studio はこのセッションを開くことができません。)
この問題は、データ収集の停止後に分析し表示するメモリ スナップショット データを準備するときに問題があったことを意味します。 この問題が表示される原因は、収集エージェントから正しい情報を取得できない場合や、実際のデータ処理など、複数の可能性があります。 そのため、何が問題かを診断するには、さらにログを記録する必要があります。
修正方法: 問題を診断できるように、追加のログ情報を含めてフィードバック チケットに返信してください。 管理者特権のコマンド プロンプトから次のコマンドを実行することで、ログ情報を取得できます。
reg add HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\DiagnosticsHub /v LogLevel /t REG_SZ /d All /reg:32
reg add HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\DiagnosticsHub /v LogDirectory /t REG_SZ /d [directory of your choice] /reg:32
これらのコマンドを実行した後、Visual Studio を起動し、シナリオを再現して Visual Studio を閉じ、選んだ DiagnosticsHub ログ ディレクトリを zip で圧縮し、このチケットに添付してください。 以降、何が起こっているかをより正確に診断できるようになります。
ログをチケットに追加した後、次のコマンドを実行してログを無効にします。
reg delete HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\DiagnosticsHub /f /v LogLevel /reg:32
reg delete HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\DiagnosticsHub /f /v LogDirectory /reg:32
エラー: "Source information not available." (ソース情報がありません。)
ソース情報を表示するには、収集時から PDB を使用できるようにする必要があります。 たとえば、CPU 使用率の diagsession ファイルを収集し、コードに変更を加えて再コンパイルし (これにより古い PBD が置き換わります)、再び .diagsession を開くと、更新したコードのモジュールのソース情報を表示できない可能性があります。
修正方法: この問題の最も簡単な回避策は、変更を加えた後に新しい diagsession を収集することです。 これにより、PDB が最新の状態に保たれます。
エラー: "内部エラーのため、メモリ分析が失敗しました。"
長いメモリ プロファイル セッションの後、その結果を分析しようとすると、このエラーが発生します。
メモリ ツールがキャプチャしたスナップショット情報と、収集エージェントによるものの間に不一致がありました。 この結果は、メモリ ツールがネイティブ スナップショットのヒープ状態ファイルを見つけられなかったことを意味します。 または、この結果は、スナップショットの GC 開始時刻と、GCStats を取得するために diagsession ファイルに登録されたものをメモリ ツールが対応付けられなかったことを意味します。
修正方法: この問題は、17.3 で修正されたツールのバグが原因でした。 新しいバージョンにアップグレードすることで、この問題は解決します。 アップグレードしても問題が解決しない場合は、フィードバック チケットを作成し、そのチケットに添付してください。
- diagsession ファイル
- Visual Studio のミニダンプ
- 作成されたメモリ スナップショットのスクリーンショット。
この問題の回避策はありません。プロファイル セッションを再起動する必要があります。
例: “X 診断イベントがドロップされました。レポート内の一部の情報が欠落しているか、不正確な可能性があります”
データのキャプチャ中にイベントが削除され、結果として得られるプロファイリング レポートが不正確または使用できなくなることがあります。 イベントの削除はさまざまな理由で発生する可能性がありますが、主にシステムがイベントを、受信レートよりも速くディスクからフラッシュできない場合に発生します。
修正方法 イベントの削除を減らすには、他のディスクや CPU の負荷の高い操作をプロファイリング時に終了するようにしてください。 これらの操作を終了すると、システムは、受信イベントのフラッシュ専用に、より多くのリソースを使用できるようになります。 また、これらの構成設定をサポートする、CPU の使用率ツールや .NET の割り当てツールなどのツールのサンプリング頻度を減らして、オーバーヘッドを削減することもできます。
エラー: ETW リソースが使い果たされました
Visual Studio プロファイラーは、Event Tracing for Windows (ETW) を使ってパフォーマンス情報を収集します。 システムで使用できる ETW セッションの数は限られており、すべてのセッションが既に使われている場合は、次のエラーが発生します: ETW resources have been exhausted
。 これらのセッションは、SysInternals ツール スイート、他のプロファイラー、他の診断ツールなどの他のプログラムによって使われます。 この問題は、次のいずれかの方法で解決できます。
セッションを使っているプログラムを閉じてリソースを解放します。
管理者特権のコマンド プロンプトから次のコマンドを実行した後、再起動することで、さらに多くのリソースを確保します。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI" /v EtwMaxLoggers /t REG_DWORD /d 128
このコマンドを実行すると、既定のセッション数が 64 から 128 に増えます (システムで許可されるセッションの最大数は 256 です)。
エラー: CPU 使用率ツールは ARM64 VM では機能しません
Visual Studio プロファイラーは、Event Tracing for Windows (ETW) を使ってパフォーマンス情報を収集します。 仮想マシン (VM) で実行する場合、ARM64 用 Windows では ETW を使用したプロファイル サンプルの収集は現在サポートされていません。 この制限を回避するには、実際の ARM64 デバイスで CPU 使用率ツールを使用するか、インストルメンテーション ツールを使用してタイミング情報をキャプチャします。
エラー: サーバー GC が有効な .NET 7 および .NET ランタイム 8.0.0 - 8.0.1 上でメモリ使用量ツールが機能しません
.NET 7 ランタイムで始まり、.NET 8 ランタイム バージョン 8.0.0 および 8.0.1 にも残っていた問題により、サーバー ガベージ コレクションの使用時にオブジェクトを列挙できません。 ASP.NET Core アプリケーションの既定では、サーバー ガベージ コレクションが有効になっています。
修正方法
この問題の回避方法:
- スナップショットを取得するとき、またはアプリケーションのダンプを収集するときは、サーバー ガベージ コレクションを無効にします。
- 影響を受けないバージョンの .NET ランタイムを使います。
関連項目: