2016-03-21 8 views
2

私は、プロセスダンプを持つWinDbgを使用したメモリ負荷の高いアプリケーションでのポストモーテム解析を行っています。このプロセスはWindowsサービスです。ファイナライザスレッドがブロックされました

次の出力は、ファイナライザがブロックされているようです。

コードを検索しましたが、スレッドを保持している不審なファイナンス方法がないようです。そのような行動を探すための共通のパターンは何ですか?

さらなる診断を行うのに役立つ他のWinDBGコマンドはありますか?

おかげで、

0:000>〜[2] K

Child-SP   RetAddr   Call Site 
00000017`fd5bf2c8 00007ffc`d340dd29 ntdll!NtWaitForSingleObject+0xa 
00000017`fd5bf2d0 00007ffc`d340b6f4 ntdll!RtlpWaitOnCriticalSection+0xe1 
00000017`fd5bf3a0 00007ffc`ca95ec1b ntdll!RtlpEnterCriticalSectionContended+0xa4 
00000017`fd5bf3e0 00007ffc`ca7a8180 clr!CrstBase::Enter+0x119 
00000017`fd5bf410 00007ffc`ca9582cc clr!ThreadStore::LockThreadStore+0x68 
00000017`fd5bf440 00007ffc`ca95829b clr!Thread::CleanupDetachedThreads+0x2c 
00000017`fd5bf4a0 00007ffc`ca8a603b clr!Thread::DoExtraWorkForFinalizer+0x186 
00000017`fd5bf4d0 00007ffc`ca960805 clr!WKS::GCHeap::FinalizerThreadWorker+0x10c 
00000017`fd5bf510 00007ffc`ca96078c clr!ManagedThreadBase_DispatchInner+0x2d 
00000017`fd5bf550 00007ffc`ca9606f5 clr!ManagedThreadBase_DispatchMiddle+0x6c 
00000017`fd5bf650 00007ffc`ca8eb377 clr!ManagedThreadBase_DispatchOuter+0x75 
00000017`fd5bf6e0 00007ffc`ca95e8b6 clr!WKS::GCHeap::FinalizerThreadStart+0xd7 
00000017`fd5bf780 00007ffc`d0d713d2 clr!Thread::intermediateThreadProc+0x7d 
00000017`fd5bf840 00007ffc`d33e5454 kernel32!BaseThreadInitThunk+0x22 
00000017`fd5bf870 00000000`00000000 ntdll!RtlUserThreadStart+0x34 
+2

'analyze -v -hang'を実行して出力を使ってブロッキングスレッドに切り替え、そのスレッドのスタックトレースを取得する'〜; kbnf'。あなたが出力を投稿するなら、確かにどこから行くべきかについての新しい指針を得るでしょう。 –

答えて

0

この特定のダンプでファイナライザスレッドがブロックされ、それは微細であってもよいです。結局のところ、ロックは常に入力されています。実際に問題があるかどうかを判断するには、f-到達可能キューにあるオブジェクトの数を確認する必要があります。あなたは!sos.finalizequeueまたは!sosex.frqを使ってそうすることができます。

!sos.dumpheapの出力を調べて、問題がメモリリークであるかどうかを確認してください。

関連する問題