当网站停止时,Oracle数据提供程序会挂起IIS工作进程

时间:2010-05-06 15:16:11

标签: asp.net oracle iis oracle11g

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

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

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

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

2 个答案:

答案 0 :(得分:14)

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

我用sos扩展连接了windbg,看起来每个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.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”添加到连接字符串。您当然会失去自动调整的好处。
  3. -Scott

答案 1 :(得分:8)

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

不幸的是,此修复程序目前只能通过“My Oracle Support”帐户使用。

  

已在11.2.0.2和修补程序9966926修复了ORACLE 11G 11.2.0.1 PATCH 5 WINGOWS(64位AMD64和INTEL EM64T)。

     

或替代方法:通过向连接字符串添加“Self Tuning = false”来禁用自我调整。