.NET 4 を実行している Windows Server 2008 R2 SP1 マシンで procdump -ma w3wp を使用して取得したダンプ ファイルを分析しています。
0:000> !ASPXPages
Going to dump the HttpContexts found in the heap.
Loading the heap objects into our cache.
HttpContext Timeout Completed Running ThreadId ReturnCode Verb RequestPath+QueryString
0x0353f65c 110 Sec no 1429 Sec XXX 200 GET /Nav/ResTry.aspx qs1
0x03545a18 110 Sec yes XXX 302 GET /Nav/
0x0354f26c 110 Sec no 1366 Sec XXX 200 GET /Nav/ResTry.aspx te
0x0355a45c 110 Sec yes XXX 200 POST /Service/ResInhId_68022569!
0x035d8454 110 Sec yes XXX 302 POST /Service/ResIntf.ashx act
0x035e1268 110 Sec no 1213 Sec XXX 200 GET /Nav/ResTry.aspx te
0x12e77088 110 Sec no 6 Sec XXX 200 GET /Nav/Activities.mvc/Index/2/7
0x12e85b10 110 Sec no 5 Sec 215 200 GET /service/Ressaveresult.aspx even
0x12e89cb8 110 Sec no 5 Sec XXX 200 GET /Nav/Activities.mvc/Index/2/5 topicid=1
0x12ed5038 110 Sec no 4 Sec XXX 200 GET /Nav/Ressave.aspx e
0x12ed9dc0 110 Sec yes XXX 302 GET /Nav/DoItem.aspx ItemId=71937319
ここには 70 を超えるスレッドがありますが、出力をトリミングしました。
ほとんどの ThreadId が表示されず、XXX として表示されるのはなぜですか? 私が使用する場合
!threads
ほぼすべての ID を確認できますが、ページ名がないことを考えると、彼らが何をしているのかを知るのは大変です。スレッドは完了としてマークされておらず、XXX が意味しているとされているものであっても、本当に死んでいるとは思えません。IIS で現在実行中の要求を調べたところ、これらのページの多くが表示されました。
私が走れば
!threadpool
XXX のない少数の ThreadId しか表示されないにもかかわらず、多数のスレッドが実行されていることがわかります。これは、それらが死んでいないという点を強制しますが、どういうわけか WinDbg または psscor4 が ThreadId を適切にロードしていません。
もう 1 つの疑問は、これらが IIS によって Thread.Abort を送信されず、指定されたタイムアウトを過ぎて実行された理由です。死神として機能するスレッドも、マシンの高 CPU の問題によって遅延した可能性はありますか? これをwindbgで確認して、この特別なスレッドを何らかの方法で特定できますか?