ダンプファイルを使用してメモリリークを診断するにはどうすればよいですか?
質問
私は、約 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 があなたの友達です。
関連
-
[解決済み] CLSID {XXXX} を持つコンポーネントの COM クラスファクトリの取得は、次のエラーにより失敗しました: 80040154。
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] "ItemsSourceを使用する前に、Itemsコレクションを空にする必要があります。"
-
[解決済み] Moq Callbackについて教えてください。
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] WCF - メッセージサイズのクォータを増加させる方法
-
[解決済み] .NET Frameworkのソースステップを有効にする」方法を教えてください。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] データテーブルの並べ替え
-
[解決済み] "ItemsSourceを使用する前に、Itemsコレクションを空にする必要があります。"
-
[解決済み] C++/CLIにおけるキャレット('^')の意味は?
-
[解決済み] スマートクライアント・ソフトウェアファクトリーの体験談
-
[解決済み] WPFで角丸ボタンを作成する/作るには?
-
[解決済み] リファレンスの追加にSystem.Web.Mvcが表示されないのはなぜですか?
-
[解決済み] .NETにおけるstructとclassの違いは何ですか?
-
[解決済み] 埋め込みリソーステキストファイルの読み方
-
[解決済み] .NETで文字列から発音区分符号(アクセント)を削除するにはどうすればよいですか?
-
[解決済み] HashSetとListの性能比較