3

断続的にデッドロックする COM+ アプリケーションのトラブルシューティングを試みています。前回ロックアップしたとき、dllhost プロセスのユーザーモード ダンプを取得し、WinDbg を使用して分析することができました。すべてのスレッドとロックを調べた後、このスレッドが所有するクリティカル セクションにすべてが要約されます。

ChildEBP RetAddr  Args to Child              
0deefd00 7c822114 77e6bb08 000004d4 00000000 ntdll!KiFastSystemCallRet
0deefd04 77e6bb08 000004d4 00000000 0deefd48 ntdll!ZwWaitForSingleObject+0xc
0deefd74 77e6ba72 000004d4 00002710 00000000 kernel32!WaitForSingleObjectEx+0xac
0deefd88 75bb22b9 000004d4 00002710 00000000 kernel32!WaitForSingleObject+0x12
0deeffb8 77e660b9 000a5cc0 00000000 00000000 comsvcs!PingThread+0xf6
0deeffec 00000000 75bb21f1 000a5cc0 00000000 kernel32!BaseThreadStart+0x34

待機しているオブジェクトはイベントです。

0:016> !handle 4d4 f
Handle 000004d4
  Type          Event
  Attributes    0
  GrantedAccess 0x1f0003:
         Delete,ReadControl,WriteDac,WriteOwner,Synch
         QueryState,ModifyState
  HandleCount   2
  PointerCount  4
  Name          <none>
  No object specific information available

私が知る限り、イベントが通知されることはなく、スレッドがハングし、プロセス内の他のいくつかのスレッドが停止します。何が起こっているのかを理解するための次のステップについて何か提案はありますか?

メソッドが PingThread と呼ばれているのを見て、既にデッドロックされているプロセス内の別のスレッドに ping を実行しようとしている可能性はありますか?

更新
これは、実際には Oracle 10.2.0.1 クライアントのバグであることが判明しました。とはいえ、オラクルのバグデータベースでバグを見つけることなく、どうやってこれを理解できたのかというアイデアにはまだ興味があります.

4

2 に答える 2

0

whichを使用!locksすると、デッドロックの自動分析を試みてから、スレッドの呼び出しスタックをダンプ~* kbし、クリティカルセクションまたはイベントオブジェクトで待機しているスレッドを確認できます。

ここに使用例があります:http ://www.dumpanalysis.org/blog/index.php/2007/07/28/crash-dump-analysis-patterns-part-9c/

さらに、この男のサイトには、マネージコードを含む他のタイプのデッドロックにWinDbgを使用した例がたくさんあります。http ://www.dumpanalysis.org/ページで「デッドロック」を検索してください。これがお役に立てば幸いです。

于 2012-07-05T15:34:02.463 に答える
0

SIEExtPubは、COM のロックを把握するのに役立ちます

そしてこれについての記事はこちら

この拡張機能の使用に問題がある場合は、返信してください

于 2010-04-03T00:07:43.823 に答える