【问题标题】:Oracle data provider pegs IIS worker process when web site is stopped当网站停止时,Oracle 数据提供程序与 IIS 工作进程挂钩
【发布时间】:2011-02-16 10:51:10
【问题描述】:

我们在 Oracle 11g 第 2 版中遇到了一个令人讨厌的问题,其中 w3wp 进程接管了整个处理器内核,并且调试显示 Oracle 数据提供程序无限抛出 ThreadAbortExceptions。开发人员通过执行以下操作发现了此问题:

1) 浏览在本地使用 Oracle 数据连接的网站(http://localhost/OracleWebSite - 我们所有的网站都使用 IIS,而不是 ASP.NET 开发服务器)。这可确保 w3wp 进程正在运行,并且应用程序池中存在活动的 Oracle 连接池。

2) 停止网站(或在相关网站上的 Visual Studio 中执行 Rebuild All 操作)。

我们在受影响的应用程序(所有 Oracle Web 应用程序)中的 Oracle 连接处理已完善且稳健。如果我们禁用连接池,则不会出现此问题。 Oracle 11g 第 1 版中不会出现此问题。

【问题讨论】:

    标签: asp.net oracle iis oracle11g


    【解决方案1】:

    任何触发重新编译的事情(web.config 更改、app_offline.htm、.aspx 文件更改等)都会导致内核上的 CPU 使用率达到最大值。如果你重复这个过程,它会最大化下一个核心的 CPU 使用率,直到整体 CPU 使用率达到 100%。

    我用 sos 扩展连接了 windbg,看起来对于每个最大化的核心,有 1 个线程卡在 System.AppDomain.Unload(System.AppDomain) 和另一个卡在 Oracle.DataAccess.Client.OracleTuningAgent.DoScan() .

    第一个线程

    • Oracle.DataAccess.Client.OracleTuningAgent.DoScan()
    • Oracle.DataAccess.Client.OracleTuningAgent.TuningFunction()
    • System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
    • System.Threading.ThreadHelper.ThreadStart()

    第二个线程

    • System.AppDomain.Unload(System.AppDomain)
    • System.Web.HttpRuntime.ReleaseResourcesAndUnloadAppDomain(System.Object)
    • System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
    • System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(System.Threading._ThreadPoolWaitCallback)
    • System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(System.Object)

    看起来 AppDomain.Unload 正在等待 OracleTuningAgent.DoScan 完成,但该线程被阻塞或休眠。

    Oracle 已确认该问题(错误号 9648040),这是当务之急。同时,可能的解决方法是:

    1. 回滚到 11gR1/早期客户端
    2. 将“Self Tuning=false”添加到连接字符串。您当然会失去自动调整的好处。

    -斯科特

    【讨论】:

    • 干杯斯科特,这解决了我的问题,尽管略有不同。基本上我的单元测试运行者没有通过其他好的测试,因为他们无法卸载他们的 appdomain。希望 Oracle 尽快发布修复程序。
    【解决方案2】:

    这个问题已经解决了。该修复程序在 Oracle 11.2.0.1.2 中发布,可通过 oracle.com 网站获得。

    很遗憾,该修复程序目前只能通过“My Oracle Support”帐户获得。

    此问题已在 11.2.0.2 和补丁 9966926 ORACLE 11G 11.2.0.1 补丁 5 适用于 WINDOWS(64 位 AMD64 和 INTEL EM64T)的错误中得到修复。

    或者解决方法:是通过将“Self Tuning=false”添加到连接字符串来禁用自我调整。

    【讨论】:

    • 我认为您列出的版本中没有修复它。我相信它已在 11.2.0.1.2 版本中修复。
    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2013-11-12
    相关资源
    最近更新 更多