1. ホーム
  2. .net

ダンプファイルを使用してメモリリークを診断するにはどうすればよいですか?

2023-09-10 09:36:33

質問

私は、約 80 MB の通常のプライベート作業セットを持つ .NET サービスを持っています。最近の負荷テストでは、プロセスが 3.5 GB のメモリ使用量に達し、マシン全体の物理メモリ (4 GB 中 3.9 GB 使用) が不足し、負荷テストが停止した後もメモリはずっと解放されませんでした。タスク マネージャーを使用して、プロセスのダンプ ファイルを取得し、それを Visual Studio 2010 SP1 で開いて、デバッグを開始することができます。

メモリの問題はどのように診断すればよいのでしょうか。dotTrace Memory 3.x が手元にありますが、これはダンプ ファイルのメモリ プロファイリングをサポートしていますか? そうでない場合、Visual Studio 2010 Premium のメモリ プロファイリング機能 (私は現在 Professional を持っています) は役に立ちますか? WinDbg は役に立ちますか?

UPDATEしてください。 新しい Visual Studio 2013 Ultimate は、ダンプ ファイルを使用してメモリの問題をネイティブに診断できるようになりました。以下を参照してください。 このブログ記事 を参照してください。

どのように解決するのですか?

WinDbgをインストールします。あなたのダンプに応じて、正しいバージョン x86 または x64 を取得することを確認する必要があります。以下は、WinDbg への直接のリンクです。 ダウンロード への直接のリンクです。

その上で、正しいダンプを取得したことを確認する必要があります。タスクマネージャーを使用して、ダンプファイルを作成することができます(プロセスを右クリック -> Create Dump File)。 64bit でプロセスが x86 の場合、32bit 版のタスク マネージャー (C:\WindowsSysWOW64taskmgr.exe>) を使用してダンプ ファイルを取得します。参照 私の記事 を参照してください。また、XPでwindbgを使用してダンプファイルを作成する必要がある場合など、ダンプファイルの取得に関する詳細な情報も参照してください。

警告 かなり急な学習曲線があり、物事はここで説明されたとおりに動作しないかもしれませんので、問題があればまた来てください。

Visual Studio でダンプを開くことができることから、あなたが .NET4 を使用していると仮定しています。以下は 非常に クイック ガイドを参照してください。

1) WinDbg を実行し、シンボル パス (File -> Symbol Search Path) を次のように設定します。

SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

2) Crash dump を開くか、.DMP ファイルを WinDbg にドラッグしてください。

3)コマンドウィンドウに次のように入力します。

.loadby sos clr

(参考までに、.NET 2の場合、コマンドは以下のようになるはずです。 .loadby sos mscorwks )

4) 次に、次のように入力します。

!dumpheap -stat

は、オブジェクトの種類とその数をリストアップするものです。 はこのような感じです。

アプリケーションのコンテキストでこれを分析し、何か異常があるかどうかを確認する必要があります。

そこには 多く があり、google があなたの友達です。