Windbg 对COM+;应用程序死锁
我正在尝试对间歇性死锁的COM+应用程序进行故障排除。上次它被锁定时,我能够获取dllhost进程的用户模式转储,并使用WinDbg对其进行分析。检查完所有线程和锁后,可以归结为该线程拥有的关键部分:Windbg 对COM+;应用程序死锁,windbg,deadlock,com+,Windbg,Deadlock,Com+,我正在尝试对间歇性死锁的COM+应用程序进行故障排除。上次它被锁定时,我能够获取dllhost进程的用户模式转储,并使用WinDbg对其进行分析。检查完所有线程和锁后,可以归结为该线程拥有的关键部分: ChildEBP RetAddr Args to Child 0deefd00 7c822114 77e6bb08 000004d4 00000000 ntdll!KiFastSystemCallRet 0deefd04 77e6bb08 000004d4 00000
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
0:016>!手柄4D4F
处理000004d4
类型事件
属性0
授权访问0x1f0003:
删除、读控制、写控制、写所有者、同步
QueryState,ModifyState
HandleCount 2
指针计数4
名称
没有特定于对象的信息可用
据我所知,事件从未收到信号,导致线程挂起并在进程中挂起其他几个线程。有人对接下来的步骤有什么建议吗
现在,鉴于该方法被称为PingThread,它是否可能正在尝试ping进程中已经死锁的另一个线程
更新这实际上是Oracle 10.2.0.1客户端中的一个bug。尽管如此,我仍然对如何在不发现Oracle bug数据库中的bug的情况下解决这个问题感兴趣。可以帮助您解决COM中的锁 这是关于这个的
如果您在使用此扩展时遇到任何问题,请发回您可以使用
!locks
将尝试自动分析死锁,然后转储线程的调用堆栈~*kb
,并检查哪些线程正在关键部分或事件对象上等待
这里有一个示例用法:
另外,这个家伙的网站有很多使用WinDbg处理其他类型死锁的例子,包括托管代码:只需在页面上搜索“死锁”,希望这能有所帮助