troushoo

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

  1. --/--/--(--) --:--:--|
  2. スポンサー広告

[sos]!ThreadPool: CPU使用率の表示/スレッドプールの状態表示

.NET用のデバッガエクステンションsos.dllのコマンド!ThreadPoolについて記述します。
!ThreadPoolを利用すると、システムのCPU使用率やスレッドプールの状態を表示することができます。

【今回使用するサンプルアプリ】
CPUに負荷をかけるサンプルプログラムを利用して、!ThreadPoolの使用例を見てみます。
このコードは、CPUに負荷のかかるメソッドMyThreadMethod()をスレッドプールに登録・実行するだけの単純なアプリです。

using System;
using System.Threading;
 
namespace MyThreadPool
{
    class Program
    {
        static void Main(string[] args)
        {
            WaitCallback wcb = new WaitCallback(MyThreadMethod);
 
            // スレッドプールに登録
    ThreadPool.QueueUserWorkItem(wcb);
            ThreadPool.QueueUserWorkItem(wcb);
 
            //何かが押させるまでプログラムを終了させない
            Console.ReadLine();
        }
 
        private static void MyThreadMethod(object o)
        {
            //CPU負荷を上げるためのコード
    long i = 1; long j = 2; long k;
            for (long l = 0; l < 90000000000; l++)
            {
                k = i * j; i = j * k; j = j + k;
            }
        }
 
    }
}



【!ThreadPool使用例】
CPUに負荷がかかっているときのダンプを取得し、!ThreadPoolの使用例を見てみます。
1. CPUに負荷がかかっているときのダンプを取得します。
ダンプの取得方法はいろいろありますが、一番簡単なのはタスクマネージャーを使用することです。
(注意).NETアプリが32bitの場合は、32bitのタスクマネージャーを使用してください。ダンプの取り方の詳細は、以前のブログをご参照ください。
ダンプファイルの作成

2. WinDbgでダンプを開きます。
(注意).NETの32bitアプリのダンプは、32ビットのWinDbgで開く必要があります。
WinDbgでダンプを開く
3. シンボル、sos.dllを読み込みます。
具体的には、以下のコマンドを実行します。
.symfix c:\sym
.reload
.loadby sos clr

4. !ThreadPoolを実行します。
”CPU utilization”の部分より、ダンプ取得時のシステムのCPU使用率が50%であったことがわかります。
また、スレッドプールの状態もわかり、現在2つのワーカースレッドがRunningであることがわかります。
!ThreadPool


【補足】
ダンプから、CPUに負荷がかかっているスレッドが何をしているのか、を調べる方法を続きで記述します。
5. !runawayコマンドを実行します。
Timeの時間が長いものがCPU時間を消費しているスレッドです。
ここでは、4と5になります。
!runaway
6. CPU時間を消費しているスレッドに移動し、!clrstackを実行します。
結果、CPU時間を消費しているスレッドのコールスタックがわかります。
以下は~4sでスレッド4に移動したのち、!clrstackを実行したところです。コールスタックよりMyThreadMethod()実行中であったことがわかります。
コールスタック確認

【リンク】
・SOS.dll (SOS デバッガー拡張)
http://msdn.microsoft.com/ja-jp/library/vstudio/bb190764.aspx
・Getting started with windbg - part I (英語)
http://blogs.msdn.com/b/johan/archive/2007/11/13/getting-started-with-windbg-part-i.aspx


  1. 2012/10/11(木) 14:48:11|
  2. SOS・Psscor2/Psscor4
  3. | トラックバック:0
  4. | コメント:0
<<Visual Studioを用いて、コード修正による影響を調べる | ホーム | perfmon.exe: パフォーマンスのトラブルシューティングに役に立つインボックスのツール>>

コメント

コメントの投稿


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

トラックバック

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

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

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

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

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

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。