troushoo

[Psscor2/Psscor4]!ASPXPages

Psscor2/Psscor4で使用できるコマンド!ASPXpagesについて説明します。!ASPXpagesを利用すると、w3wp.exeにロードされているASPXページを表示することができます。
使用例として、テスターが「ページの読み込みに時間がかかった」という問題を発見した場合のトラブルシューティングを考えます。

今回使用するサイト
以下のようなASP.NETのページを考えます。
Buttonが押されると"ボタンは押されてません"が"ボタンが押されました"に変わる単純なサイトです。
このButtonを押す時の処理に時間がかかっているサイトを例とします。


トラブルシューティング
1. テスターが、Buttonを押すとページの読み込みに時間がかかった、という問題を発見します。
2. テスターが、ページを読み込んでいる時のw3wp.exeのダンプを取得します。
ブラウザのアイコンでページ読み込み中かはわかります。

ダンプを取得する際に、w3wp.exeが64bit OS上で動いておりかつ32bitプロセスとして動いてるときは注意してください。
(その際はこちらこちらをご参照ください。)
今回は64bit OS上の64bitプロセスとして動いているので、通常のタスクマネージャーからダンプを作成しました。

3. 開発者にダンプを送ります。
4. 開発者はダンプをWinDbgで開きます。
x86のダンプの際はx86のWinDbgを、x64のダンプの際はx64のWinDbgを使用する必要があることに注意してください。
5. シンボルの読み込み、Psscor2/Psscor4の読み込みを行います。
今回は.NET 4.0の環境かつx64のダンプであったのでx64用のPsscor4を使用しました。

6. !ASPXPagesを実行します。

ThreadIdがXXXであるものはそのスレッドが終了したものを表しています。現在動いているのはThreaIdが25のものです。
そのスレッドは10 Sec動いていることも確認できます。
7. ~25sでカレントスレッドを25に移し、!clrstackでスタックを見てみます。

現在このスレッドはSleepInternal()になっていることがわかります。
8. SleepInternal()を呼び出し得ているButton1_Click()関数のソースDeffault.aspx.csを見てみます。

protected void Button1_Click(object sender, EventArgs e)
{
    Thread.Sleep(20000);
    Label1.Text = "ボタンが押されました";
}

今回は擬似的にSleep()でスローダウンを発生させましたが、同様の方法でスローダウンの原因がわかりえます。
このようにPsscor2/Psscor4の!ASPXPagesを利用すると、サイトのスローダウンの原因を調べることが可能になりえます。


  1. 2011/12/17(土) 16:03:30|
  2. SOS・Psscor2/Psscor4
  3. | トラックバック:0
  4. | コメント:0
<<[Psscor2/Psscor4]!DumpThreadConfig | ホーム | Psscor2/Psscor4で.NETのデバッグ>>

コメント

コメントの投稿


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

トラックバック

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

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (114)
ネットワーク (54)
Wireshark (48)
AD (36)
Linux (45)
WinDbg (46)
SOS・Psscor2/Psscor4 (25)
Visual Studio (56)
Tips (32)
コンテナ (4)
Azure (17)
.NET (24)
Python (9)
Java (5)
SQL (6)
事例 (1)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

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