私の以前のブログ記事(でSQL Serverのメモリリーク)、私がする方法を説明し、「ヒープ!」メモリリークを識別するためのコマンドモジュールを使用します。時々 、私たちはメモリモデルを見つけるか、検索コマンド(複数可)を使用するように「!D」コマンドを使用すると、表示メモリの原因を見つけることができません。
この場合、我々は、メモリリークを追跡するために、デバッグ診断ツールやUMDHを使用することができます。このブログ記事は、メモリリークを識別するために、デバッグ診断ツールを使用する方法について説明します。
ダウンロードしてインストールデバッグの診断ツールをhttp://www.microsoft.com/en-us/download/details.aspx?id=26798から
1.ターゲットツール、「オプション」 - >「環境設定」、 「レコードのコールスタックを選択すぐにリークを監視するとき」。
2.「ルール」タブに移動し、「ルールを追加」を選択します。
3.「ナイーブ(非ネット)メモリリークを選択し、漏れを扱います」。
4. [SQL Serverまたはメモリリークを追跡するための任意のプロセス。
5.「次へ」およびデフォルトのオプションを(ルールが完了または失敗したとき、あなたは「自動アンロードリークトラック」を選択することができます)のまま 。
6.「次へ」をクリックして、今のルールをアクティブにします。
7.Leaktrack.dllは年の分布を追跡するためのプロセスに追加されました。
8.今、あなたは再びリークを待つことができます。
1
2
3
4
5
6
7
|
-- If you are learning how to troubleshoot SQL Server memory leak follow the steps which we followed in previous post (https://mssqlwiki.com/2012/12/04/sql-server-memory-leak/)to leak the memory.
-- Download HeapLeak.dll from this link.
-- Create an extended stored procedure in SQL Server
sp_addextendedproc ‘HeapLeak’,‘C:\HeapLeakdll\HeapLeak.dll’
-- Let us execute this Extended SP 30 times and leak memory.
exec
HeapLeak
go 30
|
9.あなたがメモリリークが疑われる場合は、「ルール」へ、そして右クリックし、完全なダンプ「リークルール」を実行するためにユーザをナビゲートすることで。
ダンプがキャプチャされた後10、高度な分析]タブに移動し、データファイルを追加し、我々が生成するダンプを選択します。
11.標的化ツール、「オプション」 - >「分析のためのシンボルパスを設定します」。以下のデフォルトのMicrosoftのシンボルパス。
SRVの*のC:\ Websymbols *のhttp ://msdl.microsoft.com/download/symbols; C:\リリース
重要:使用してSQL ServerがDLLの代替cのシンボルパスにロードされます:\リリース(オプション)
12使用可能なスクリプトの解析では、メモリ圧力アナライザ(メモリanalysis.asp)を選択します。
13.「分析の開始」。
14時間過ごしたロードシンボル解析は、少し時間がかかることがあります。分析が完了したら、それはHTML形式のレポートを生成して開きます。Cにデフォルトで保存されたHTMLレポート:\プログラムファイル\ DebugDiag \は \ Reportsのその後の参照のために使用することができます。
私はここheapleak.dllメモリリーク、http://sdrv.ms/TH1qfRを使用する際に収集したサンプルレポートを添付しました。あなたはそれを参照として使用することができます。
デバッグ診断ツールメモリ圧力計は、テーブル次のレポートやアナリストは、メモリをまとめたものが生成されます。
1
2
3
4
5
6
7
|
sqlservr.exe__…………dmp
Virtual Memory Analysis Report
Heap Analysis Report
Leak Analysis Report
Outstanding allocation summary
Detailed module report (Memory)
Detailed module report (Handles)
|
15.分析は、位置決めリークメモリのかなりの部分をモジュールレポートにまとめられています。次のレポートを確認します。
16.報告書は明らかに255メガバイトHeapLeak.dll重要な割り当てがあることが示されました。オフセットでメモリ23を割り当てるための「サブ」機能でheapleak.dllで。
17.仮想メモリの概要を確認します。これは、仮想メモリアドレス分配孔ホームについての完全な画像を提供します。以下の要約は、32ビットのSQL Server年間で通常である1.57ギガバイト、に保持さが、272.94メガバイトローカルヒープメモリが正常でないがありますされています。
ヒープの概要を表示、50のスタックがあります。
18.今、重要な割り当ての概要を参照してください。これは、流通およびサイズ分布の前にモジュール10の合計数を示します。以下の要約HeapLeakで26182サイズの占有255.6メガバイト
注意:それはHeapLeakであるが、実際にはそれがどんなリークメモリモジュールであってもよい。この報告書では。
19.あなたは、詳細なレポートモジュール(メモリ)も見ることができます。(あなたがすべて読み込まれたモジュールのシンボルを設定している場合)には、メモリを割り当てるために、各モジュールとソース線と機能から、メモリ割り当てを与えます。
私たちは今、14点の位置が機能するためのサブ行番号に255メガバイト、そして未発表HeapLeak.dllが割り当てられていることを確認してください。このレポートはまた、あなたの関数は、メモリのコードパスを割り当てたときに示しコールスタックの例を示します。参考例HTMLレポートファイルhttp://sdrv.ms/TH1qfR。