代码之家  ›  专栏  ›  技术社区  ›  Greg Smalter

当网站停止时,Oracle数据提供程序将跟踪IIS工作进程

  •  12
  • Greg Smalter  · 技术社区  · 14 年前

    我们在Oracle11gRelease2中遇到了一个严重的问题,W3wp进程接管了整个处理器核心,调试表明Oracle数据提供程序正在无限地抛出ThreadAbortExceptions。开发人员通过执行以下操作发现此问题:

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

    2)停止网站(或在有关网站上的Visual Studio中执行“全部重建”操作)。

    在受影响的应用程序(所有Oracle Web应用程序)中,我们的Oracle连接处理功能已建立并非常强大。如果禁用连接池,则不会出现此问题。Oracle 11g版本1中不存在此问题。

    2 回复  |  直到 13 年前
        1
  •  8
  •   Sam Rueby    13 年前

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

    不幸的是,修复程序目前只能通过“我的Oracle支持”帐户提供。

    这已在11.2.0.2和补丁9966926中修复,Oracle 11G 11.2.0.1 Patch 5 Bug for Windows(64位AMD64和Intel EM64T)。

    或者解决方法:通过在连接字符串中添加“self tuning=false”来禁用自调整。

        2
  •  14
  •   scottt732    14 年前

    任何触发重新编译的操作(web.config change、app_offline.htm、.aspx file change等)都会导致内核上的CPU使用率达到最大。如果您重复这个过程,它将最大化下一个核心的CPU使用率,直到整个CPU使用率达到100%。

    我将windbg与sos扩展连接在一起,看起来每个maxed out核心有一个线程卡在system.appdomain.unload(system.appdomain)中,另一个线程卡在oracle.dataaccess.client.oracletuningagent.doscan()上。

    第一线程

    • oracle.dataaccess.client.oracletuningagent.doscan()
    • oracle.dataaccess.client.oracletuningagent.tuningFunction()
    • 运行(system.threading.executioncontext,system.threading.contextcallback,system.object)
    • system.threading.threadhelper.threadstart()

    第二根线

    • 卸载(system.appdomain)
    • system.web.httpruntime.releaseresourcesandunloadappdomain(system.object)
    • 运行(system.threading.executioncontext,system.threading.contextcallback,system.object)
    • system.threading.\u threadpoolwaitcallback.performwaitcallbackinternal(system.threading。_线程池等待回调)
    • system.threading.\u threadpoolwaitcallback.performwaitcallback(system.object)

    看起来Appdomain.unload正在等待OracleTuningAgent.doscan完成,但该线程被阻塞或正在休眠。

    甲骨文已经确认了这个问题(bug 9648040),这是当务之急。同时,可能的解决办法是:

    1. 回滚到11gr1/早期客户端
    2. 将“self tuning=false”添加到连接字符串。你当然会失去自动调谐的好处。

    -史葛