programing

웹 사이트가 중지될 때 Oracle 데이터 공급자가 IIS 작업자 프로세스를 pegging합니다.

batch 2023. 8. 9. 20:37
반응형

웹 사이트가 중지될 때 Oracle 데이터 공급자가 IIS 작업자 프로세스를 pegging합니다.

Oracle 11g Release 2에서는 w3wp 프로세스가 전체 프로세서 코어를 차지하는 심각한 문제가 발생하고 있으며, 디버깅 결과 Oracle 데이터 공급자가 ThreadAbortExceptions를 무한정 던지고 있는 것으로 나타났습니다.한 개발자가 다음 작업을 수행하여 이 문제를 발견했습니다.

로컬에서 Oracle 데이터 연결을 사용하는 웹 사이트(http://localhost/Oracle WebSite - ASP가 아닌 IIS를 사용합니다.NET 개발 서버(모든 사이트용).이렇게 하면 w3wp 프로세스가 실행되고 활성 Oracle 연결 풀이 앱 풀에 존재합니다.

웹 사이트를 중지하거나 해당 웹 사이트의 Visual Studio에서 모두 재구성 작업을 수행합니다.

영향을 받는 애플리케이션(모든 Oracle 웹 애플리케이션)에서 Oracle 연결 처리는 잘 확립되어 있고 강력합니다.연결 풀링을 사용하지 않는 경우에는 이 문제가 발생하지 않습니다.이 문제는 Oracle 11g 릴리스 1에서는 발생하지 않습니다.

재컴파일을 트리거하는 모든 항목(web.config 변경, app_offline.htm, .aspx 파일 변경 등)은 코어의 CPU 사용량을 최대화합니다.이 프로세스를 반복하면 전체 CPU 사용량이 100%가 될 때까지 다음 코어의 CPU 사용량을 초과합니다.

나는 sos 확장으로 windbg를 연결했고 각 최대 코어에 대해 시스템에 스레드가 1개 고착된 것처럼 보입니다.AppDomain.언로드(시스템).AppDomain) 및 Oracle에서 다른 하나가 고착되었습니다.데이터 액세스.고객.Oracle Tuning Agent.스캔()을 수행합니다.

첫 번째 스레드

  • Oracle.DataAccess.고객.Oracle Tuning Agent.DoScan()
  • Oracle.DataAccess.고객.Oracle Tuning Agent.튜닝 기능()
  • 시스템. 스레딩.실행 컨텍스트입니다.실행(시스템).스레드화.실행 컨텍스트, 시스템.스레드화.컨텍스트 콜백, 시스템.객체)
  • 시스템. 스레딩.스레드 도우미.스레드 시작()

두 번째 스레드

  • System.AppDomain.언로드(시스템).앱도메인)
  • 시스템. 웹.Http 런타임.리소스를 릴리스하고 AppDomain(시스템)을 언로드합니다.객체)
  • 시스템. 스레딩.실행 컨텍스트입니다.실행(시스템).스레드화.실행 컨텍스트, 시스템.스레드화.컨텍스트 콜백, 시스템.객체)
  • 시스템. 스레딩._ThreadPoolWaitCallback.대기 콜백 수행내부(시스템).스레드화._ThreadPoolWait콜백)
  • 시스템. 스레딩._ThreadPoolWaitCallback.대기 콜백(시스템)을 수행합니다.객체)

AppDomain처럼 보입니다.Oracle Tuning Agent에서 언로드가 대기 중입니다.스캔을 완료하지만 해당 스레드가 차단되었거나 대기 중입니다.

Oracle에서 이 문제(bug # 9648040)를 확인했으며 최우선 과제입니다.그 동안 가능한 해결 방법은 다음과 같습니다.

  1. 11gR1/이전 클라이언트로 롤백
  2. 연결 문자열에 'Self Tuning=false'를 추가합니다.물론 자동 튜닝의 이점을 잃게 됩니다.

-스콧

이 문제는 해결되었습니다.이 수정 프로그램은 Oracle 11.2.0.1.2에서 릴리스되었으며, 이 수정 프로그램은 oracle.com 웹 사이트를 통해 제공됩니다.

유감스럽게도 현재 수정은 "My Oracle Support" 계정을 통해서만 가능합니다.

이 문제는 11.2.0.2 및 패치 9966926 ORACLE 11G 11.2.0.1 Patch 5 BUG for WINDOWS(64비트 AMD64 및 INTEL EM64T)에서 해결되었습니다.

또는 해결 방법: 연결 문자열에 "Self Tuning=false"를 추가하여 자체 튜닝을 비활성화하는 것입니다.

언급URL : https://stackoverflow.com/questions/2782169/oracle-data-provider-pegs-iis-worker-process-when-web-site-is-stopped

반응형