troushoo

スポンサーサイト

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

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

WPR/WPA を用いた、アプリが何を待っているかを調べる方法

WPR/WPA を用いた、アプリが何を待っているかを調べる方法 

概要・まとめ

“アプリの処理が一向に進まない” というトラブルに遭遇することがあります。
そのような状況下で使えるWPR/WPA を使用したトラブルシューティング方法を紹介します。

内容

WPR/WPA とは?
WPR はWindows Performance Recorder の略で、WPA はWindows Performance Analyzer の略です。
WPR/WPA はWindows 8.1 のSDK に含まれており、フリーで使うことができます。

ダウンロードは、Microsoft のサイトからダウンロード可能です。
WPR/WPA のダウンロード

インストールは、ダウンロードしたインストーラーを実行しウィザードに従うだけで2・3分で終了します。
ウィザード中の”Select the features you want to install” の画面で、”Windows Performance Toolkit” にチェックが入っていることを確認してください。


WPR/WPA を用いた“アプリの処理が一向に進まない” という問題のトラブルシューティング手法
以下、2つのセクションに分けて、トラブルシューティング方法を紹介します。
1. WPR を用いて情報収集
2. WPA を用いて、取得した情報の解析

[1. WPR を用いて情報収集]
まずは、”アプリの処理が一向に進まない” 現象が発生している際の情報を収集します。

1.1. C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\WPRUI.exe を起動します。
WPRUI.exe を起動

1.2. “More options” をクリックします。
More options

1.3. 基本的な情報の収集を意味する”First level triage” にチェックが入っていることを確認し、“Start” を押し情報の収集を開始します。
情報の収集を開始

1.4. “アプリの処理が一向に進まない” という現象を再現させます。

1.5. “Save" を押し、情報の収集を終了します。
Save

1.6. “Save” を押すと、”File Name” のパスに、情報が格納されたファイルが保存されます。
情報が格納されたファイルが保存される

[2. WPA を用いて、収集した情報の解析]
2.1. 上記1.6. で保存したファイルをダブルクリックします。すると、WPA が起動します。
ダブルクリック

2.2. “Computation” の左の三角形をクリックし、”Computation”を展開します。
Computation を展開

2.3. 展開された中にある”CPU Usage (Precise)” をダブルクリックします。


2.3. 右のパネルに現れた、アプリの処理が一向に進まないアプリ(= 本例ではMyWaitAnalysis.exe) を展開します。


2.4. わかりやすさのため、”Waits (us) Max” をクリックし、”Waits (us) Max” でソートします。


2.5. すると、MyWaitAnalysis.exe で一番待ち時間が長いスレッドがわかります。
本例では、スレッドID 4,676 でした。
一番待ち時間が長いスレッドがわかる

2.6. なぜMyWaitAnalysis.exe が長期間待ち状態になっているのかを調べてみます。
それには、”ReadyingProcess”、”ReadyingThreadId” を見るとわかります。
”ReadyingProcess” の”ReadyingThreadId” が、”NewThreadyId” の待ち状態を解除したスレッドです。


すなわち、言い換えると、”NewThreadyId” は”ReadyingProcess” の”ReadyingThreadId” を待っていたことになります。

今回の例に当てはめると、以下のようになります。
a) スレッドID4,676 はMyWaitAnalysis.exe のスレッドID 1,228 を待っている。
b) スレッドID 1,228 は、notepad.exe を待っている。
Wait Analysis

2.7. 具体的にnotepad.exe の何を待っていたのかを調べるために、コールスタックを見てみます。
そのために、タイトルの行を右クリックし”ReadyThreadStack” を追加します。
”ReadyThreadStack” は、待ち状態を解除したコールスタックがわかります。
ReadyThreadStack を追加

2.8. わかりやすさのために、”ReadyThreadStack” の行ドラッグアンドドロップで”ReadyThreadId” の隣に移動しました。

2.9. “Trace” → “Load Symbols” で、シンボルをロードします。
シンボルのロード

2.10. すると、notepad.exe のコールスタックにPspExitThread とあり、MyWaitAnalysis.exe はnotepad.exe の終了を待っているのではと想像できます。
待ち状態を解除したコールスタック

2.11. 今回用いたコードを見てみます。
推測通り、notepad.exe を待っていた、という事がわかります。

using System.Diagnostics;

namespace MyWaitAnalysis
{
class Program
{
static void Main(string[] args)
{
Process p = Process.Start("notepad.exe");

p.WaitForInputIdle();
p.WaitForExit();
}
}
}


情報元
CPU Analysis (英語)

関連記事
WPA (= Windows Performance Analyzer) でパフォーマンスの比較
ブート時・シャットダウン時のパフォーマンス調査 : WPR・WPA


  1. 2013/12/15(日) 22:50:38|
  2. ツール
  3. | トラックバック:0
  4. | コメント:0
<<DebugDiag を用いて、任意のメソッド実行時にダンプを採取する方法 | ホーム | PsPing : TCP のポートにping できるMicrosoft のツール>>

コメント

コメントの投稿


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

トラックバック

トラックバック URL
http://troushoo.blog.fc2.com/tb.php/148-a6892567
この記事にトラックバックする(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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。