troushoo

CLRプロファイラ V4の紹介

今回はCLRプロファイラ V4の紹介を行います。
以前のバージョンのCLRプロファイラの紹介はMSDNに図入りで詳細な説明がありますので、ここでは、CLRプロファイラV4に焦点を当てて紹介します。
CLRプロファイラV4には以下の特徴があります。
 ・.NET 2.0, 3.0, 3.5, 4.0の.NETアプリのプロファイルのサポート
  (注)CLRプロファイラ V4の起動には.NET 4.0が必要です。
 ・Silverlight 4のプロファイルのサポート
 ・起動中のプロセスに対し、アタッチ・デタッチをしてヒープの状態を確認可能
 ・CLRのインプロセス サイドバイサイドに対応し、どのCLRインスタンスをプロファイルするかを指定可能
以下、起動中のプロセスに対し、アッタチ・デタッチをしてヒープの状態を確認する方法の詳細を記述します。

サンプルアプリ
エンターを押すとdummyインスタンスを作成する単純な.NET 4アプリ(アプリ名:CLRProfile4_2.exe)を利用します。

class dummy
{
    int[] i = new int[10000000];
}
class Program
{
    static void Main(string[] args)
    {
        ArrayList al = new ArrayList();
        while (true)
        {
            System.Console.ReadLine();
            al.Add(new dummy());
            System.Console.WriteLine((al.Count).ToString() + "個のdummyインスタンスを作成");
        }
    }
}
プログラムが終了するまでdummyインスタンスは解放されないので、エンターを押すたびにメモリが増え続け、擬似的なメモリリーク状態となります。
この際に、CLRプロファイルを使用して、動的にプロセスにアッタチして、どのオブジェクトがメモリを圧迫しているかを確認してみます。

CLRプロファイル V4
1.
以下のマイクロソフトのサイトよりCLRプロファイラ V4をダウンロードします。
http://www.microsoft.com/download/en/details.aspx?id=16273
2. ダウンロードしたEXEを実行するとZIPファイルが出来上がり、そのZIPファイルを解凍するとCLRプロファイラが利用可能となります。
  (補足)CLRプロファイラV4にはソースコードもついてます。
3. 上記のサンプルアプリ(CLRProfile4_2.exe)を起動し、後で使用するPIDを調べておきます。PIDはタスクマネージャーからわかります。

タスクマネージャーに表示されていない場合は、表示→列の選択からPIDにチェックを入れてください。

4. CLRプロファイラを実行すると以下のような画面になります。

5. Attach Processをクリックします。

6. 以下のような画面になるので、プロファイルを行いたいPIDを入力します。

7. 画面が戻り以下のような状態になっています。
Show Heap nowをクリックします。

8. 以下のような画面が表示されます。

一番右2つの四角の中の情報を見ると、dummyインスタンスが7つあり、そのdummyインスタンスがInt32[]オブジェクトを持っており、そのInt32[]オブジェクトの合計サイズが267MBでヒープ上の大部分を占めていることがわかります。

これらの情報をもとにメモリリークの調査を行うことが可能になります。
  (補足)dummyインスタンスが7個あることは、プログランの出力からも確認できます。
  

補足
Concurrent GCが有効になっていると、プロセスにアタッチができません。アタッチしようとすると以下のような画面が表示されます。

Concurrent GCを無効にする簡単な方法の一つとして、exeと同じフォルダに、<exe名>.configファイルを置いて、アプリを起動する方法があります。

configファイルの中身は以下のように記述します。

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <runtime>
    <gcConcurrent enabled="false" />
  </runtime>
</configuration>
・CLRプロファイルは無償のプロファイラですが、有償のプロファイラとして有名なものに以下のようなものがあります。
- NET Memory Profiler
http://memprofiler.com/
- ANTS Performance Profiler
http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/
- YourKit Profiler
http://www.yourkit.com/.net/profiler/index.jsp
- dotTrace 5.0 Performance
http://www.jetbrains.com/profiler/

リンク
CLRProfiler V4 Released
http://blogs.msdn.com/b/davbr/archive/2011/02/01/clrprofiler-v4-released.aspx
・Finding Memory Leaks in WPF-based applications
http://blogs.msdn.com/b/jgoldb/archive/2008/02/04/finding-memory-leaks-in-wpf-based-applications.aspx


  1. 2012/04/10(火) 14:04:16|
  2. ツール
  3. | トラックバック:0
  4. | コメント:0
<<Visual StudioでWindows Azureのリモートデバッグ | ホーム | [sos]!U:アセンブラの表示>>

コメント

コメントの投稿


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

トラックバック

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

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

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

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

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