troushoo

PerfView を用いて.NET アプリのメモリリークの調査


概要

PerfView を用いて、任意の2つの時点のヒープメモリの差分を比べることで、メモリリークの原因調査を行う方法を紹介します。

内容

PerfView を用いて.NET アプリのメモリリークの調査
2つの時点のヒープメモリの情報を採取
1. PerfView を起動します。

2. 「Memory」→「Take Heap Snapshot」をクリックします。


3. メモリリークの原因を調べたいプロセスをクリックし「Dump GC Heap」をクリックし、ヒープメモリの情報を採取します。


4. .NET アプリのメモリ使用量増加の発生後、再度「Dump GC Heap」を実行し、ヒープメモリの情報を採取します。

2つの時点のヒープメモリの比較
1. PerfView を起動します。

2. 上記で採取した、ヒープメモリの情報(.gcdump) をダブルクリックします。
比較を実行したい、2つの時点の.gcdump を開きます。


3. 「Diff」→「With Baseline:」をクリックします。
すると、選択したものをベースラインとして、現在開いているヒープメモリ使用量との比較が実行できます。


4. 新しく表示された「Totals Metric」より差分のバイト、「Count」より差分のオブジェクト数がわかります。
以下のスクリーンショットでは、差分が約512 MB、100 オブジェクトであることがわかります。


5. 「By Name」のタブで、差分のあったオブジェクト一覧が確認できます。
差分の大きいオブジェクトがメモリリークが疑われるオブジェクトになります。
ここでは「MyLeakApp2!MyLeakApp2.Program+Foo」の差分が一番多かったことがわかります。


6. オブジェクトをダブルクリックすると、そのオブジェクトのルートがわかります。



今回用いたプログラムのソースコード
今回用いたプログラムのソースコードは以下です。

using System;
 
namespace MyLeakApp2
{
    class Program
    {
        static Foo[] array;
        
        static void Main(string[] args)
        {
            int i;
 
            array = new Foo[2048];
            i = 0;
 
            while (i < 2048)
            {
                Console.ReadLine();
                array[i] = new Foo();
                i++;
            }
        }
 
        public class Foo
        {
            private byte[] m_buffer = new byte[10240000];
        }
    }
}



情報元
Defrag Tools #115 – PerfView Part 3 (英語)

関連記事
PerfView を用いてAPS.NET のパフォーマンス調査
.NET の1st チャンスの例外の情報を、簡単にしかも低負荷で確認する方法 : PerfView


  1. 2015/11/18(水) 00:11:43|
  2. ツール
  3. | トラックバック:0
  4. | コメント:0
<<Linux 上のC++ アプリをVisual Studio でリモートデバッグ | ホーム | Windows 10 SDK のWinDbg からの新コマンド dx>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://troushoo.blog.fc2.com/tb.php/265-ffc8e3bf
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (92)
ネットワーク (76)
Visual Studio (56)
SOS・Psscor2/Psscor4 (25)
WinDbg (25)
Linux (24)
Azure (17)
Tips (20)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する