【Real World Case】12.2.0.1版本OracleClient bug导致线程阻塞

最近有生产环境突发系统整体卡死的问题,问题出现后只能通过重启iis解决,检查问题时段应用和数据库服务器系统资源占用正常、数据库会话正常未出现阻塞及明显等待。抓取w3wp.exe进程dump,发现存在大量线程阻塞,阻塞源线程非产品引入、被锁的对象位于ODP层面。

根据Debugdiag分析,有132个线程被阻塞,阻塞源为140号线程。

 

 检查#140线程,堆栈信息如下:

复制代码
OS Thread Id: 0x3c8c (140)
        Child SP               IP Call Site
000000deeaefdea0 00007ffa6bb867c4 [InlinedCallFrame: 000000deeaefdea0] Oracle.DataAccess.Client.OpsCon.Dispose(IntPtr ByRef, IntPtr ByRef, Oracle.DataAccess.Client.OpoConValCtx* ByRef, Oracle.DataAccess.Client.OpoConRefCtx)
000000deeaefdea0 00007ffa07b21a3c [InlinedCallFrame: 000000deeaefdea0] Oracle.DataAccess.Client.OpsCon.Dispose(IntPtr ByRef, IntPtr ByRef, Oracle.DataAccess.Client.OpoConValCtx* ByRef, Oracle.DataAccess.Client.OpoConRefCtx)
000000deeaefde70 00007ffa07b21a3c DomainBoundILStubClass.IL_STUB_PInvoke(IntPtr ByRef, IntPtr ByRef, Oracle.DataAccess.Client.OpoConValCtx* ByRef, Oracle.DataAccess.Client.OpoConRefCtx)
000000deeaefdf80 00007ffa0747dc41 Oracle.DataAccess.Client.ConnectionPool.RegulateNumOfCons(System.Object)
000000deeaefe0c0 00007ffa0747d5e3 Oracle.DataAccess.Client.ConnectionPool.RegulateNumOfCons(System.Object)
000000deeaefe200 00007ffa0747cd9b Oracle.DataAccess.Client.CPCtx.RegulateNumOfConsThreadFunc(System.Object)
000000deeaefe270 00007ffa51735ab3 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
000000deeaefe340 00007ffa51735944 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
000000deeaefe370 00007ffa5176b0ba System.Threading.TimerQueueTimer.CallCallback()
000000deeaefe3d0 00007ffa5176aeb7 System.Threading.TimerQueueTimer.Fire()
000000deeaefe440 00007ffa51725b05 System.Threading.TimerQueue.FireNextTimers()
000000deeaefe8b8 00007ffa5c2768d3 [DebuggerU2MCatchHandlerFrame: 000000deeaefe8b8] 
000000deeaefea48 00007ffa5c2768d3 [ContextTransitionFrame: 000000deeaefea48] 
000000deeaefec78 00007ffa5c2768d3 [DebuggerU2MCatchHandlerFrame: 000000deeaefec78] 
复制代码

 

根据阻塞源线程,搜索发现Stack Overflow有个类似的case,解决方案为:disable DCD by removing SQLNET.EXPIRE_TIME in SQLNET.ORA on the server, or upgrade to a post 12.2 database version that have no more DCD packets but uses the TCP stack instead.按照方案升级将OracleClient升级为19c后问题解决。

 

posted on   王.小辉  阅读(123)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
历史上的今天:
2021-01-06 【Real World Case】记一次显示GC导致的“服务器太忙”报错
2021-01-06 整体性/并发场景性能问题排查思路
2021-01-06 Windows日志获取方法
2021-01-06 Process Monitor日志获取方法

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示