1

.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で確認して、この特別なスレッドを何らかの方法で特定できますか?

4

1 に答える 1

0

通常、完了したリクエストの ThreadId は XXXX です。これらはまだガベージ コレクションされていないため、メモリ内に残っています。ただし、Completed=no のリクエストにも XXXX があるのは奇妙です。~*e !clrstack を実行して、すべてのマネージド スレッドのスタックを取得してみてください。そのような方法で。ダンプの瞬間に何が起こっているかを正確に確認できます。

于 2013-02-26T22:05:08.417 に答える