2010-03-03 3 views
3

간헐적으로 교착 상태가되는 COM + 응용 프로그램의 문제를 해결하려고합니다. 마지막으로 잠겨있을 때, 나는 dllhost 프로세스의 usermode 덤프를 가져 와서 WinDbg를 사용하여 분석 할 수있었습니다. 모든 스레드와 잠금을 검사 한 후, 모두가이 스레드가 소유 한 임계 영역에 종기가 : 지금까지 내가 말할 수있는COM + 응용 프로그램 데드락 문제 해결

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 

:

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 

가에 기다리고 개체 이벤트입니다 , 이벤트가 신호를받지 못하게되어 스레드가 멈추고 프로세스의 다른 여러 스레드를 보류하게됩니다. 아무도 무슨 일이 일어나고 있는지 알아 내려고 다음 단계에 대한 제안이 있습니까?

이제 메소드가 PingThread라고 불리는데, 이미 교착 상태에있는 프로세스의 다른 스레드에 대해 ping을 시도 할 가능성이 있습니까?

이 실제로 오라클 10.2.0.1 클라이언트의 버그로 밝혀졌다
UPDATE. 비록 오라클의 버그 데이터베이스에서 버그를 발견하지 않고서 어떻게 해결할 수 있었는지에 대한 아이디어에 여전히 관심이 있습니다.

답변

0

SIEExtPub는 COM

여기

article입니다 잠금을 알아낼 수 있습니다이

이 확장을 사용하여 어떤 문제가 다시 게시하시기 바랍니다있는 경우

0

당신은 시도 할 것이다 !locks하는 사용할 수 있습니다 교착 상태를 자동으로 분석하고 스레드 ~* kb의 호출 스택을 덤프하고 중요한 섹션이나 이벤트 객체에서 대기중인 스레드를 확인합니다. 여기 예를 들어 사용이

: 희망 http://www.dumpanalysis.org/ 그냥 '교착 상태'에 대한 페이지에서 검색을 수행 http://www.dumpanalysis.org/blog/index.php/2007/07/28/crash-dump-analysis-patterns-part-9c/

사람의 사이트 플러스는 관리 코드를 포함하여 교착 상태의 다른 유형의 WinDbg를 사용 예는 많이있다 이것은 도움이됩니다.