Поставщик данных Oracle привязывает рабочий процесс IIS, когда веб-сайт останавливается

Мы испытываем противную проблему в Выпуске 2 11 г Oracle, где процесс w3wp вступает во владение и все ядро процессора и отладка шоу, что поставщик данных Oracle бросает ThreadAbortExceptions бесконечно. Разработчик нашел эту проблему путем выполнения следующего:

1) Просмотрите веб-сайт, который использует соединения данных Oracle локально (http://localhost/OracleWebSite - мы используем IIS, не ASP.NET dev сервер, для всех наших сайтов). Это гарантирует, что процесс w3wp работает и что активный пул Oracle соединений существует в пуле приложений.

2) Остановите веб-сайт (или выполните Восстанавливание Всей операции в Visual Studio на рассматриваемом веб-сайте).

Наша обработка соединения Oracle в затронутых приложениях (все веб-приложения Oracle) известна и устойчива. Эта проблема не происходит, если мы отключаем организацию пула подключений. Эта проблема не происходит в Выпуске 1 11 г Oracle.

12
задан Greg Smalter 6 May 2010 в 15:21
поделиться

1 ответ

Все, что вызывает перекомпиляцию (изменение web.config, app_offline.htm, изменение файла .aspx и т.д.), приводит к максимальному использованию CPU на ядре. Если вы повторяете этот процесс, то максимальное использование ЦП достигается на следующем ядре, пока общее использование ЦП не достигнет 100%.

Я подключил windbg с расширениями sos, и похоже, что для каждого максимально загруженного ядра есть 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' в строку подключения. Вы, конечно, потеряете преимущества автоматической настройки.

-Scott

14
ответ дан 2 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: