현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

경합, 성능 저하 및 교착 상태는 ASP.NET 응용 프로그램에서 웹 서비스를 호출 하는 경우

이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.

이 문서의 영문 버전 보기:821268
현상
Microsoft ASP.NET 응용 프로그램에서 웹 서비스에 대 한 호출을 수행 하면 경합, 성능 저하 및 교착 상태가 발생할 수 있습니다. 클라이언트가는 요청이 응답 (또는 "중단") 하지 나 실행 하는 데 시간이 오래 걸릴 것을 보고할 수 있습니다. 교착 상태가 의심 되 면 작업자 프로세스가 재활용 될 수 있습니다. 응용 프로그램 이벤트 로그에 다음과 같은 메시지가 나타날 수 있습니다.
  • 인터넷 정보 서비스 (IIS) 5.0을 사용 하는 응용 프로그램 로그에 다음과 같은 메시지가 나타납니다.

       Event Type:     Error   Event Source:   ASP.NET 1.0.3705.0   Event Category: None   Event ID:       1003   Date:           5/4/2003   Time:           6:18:23 PM   User:           N/A   Computer:       <ComputerName>   Description:      aspnet_wp.exe  (PID: <xxx>) was recycled because it was suspected to be in a deadlocked state.      It did not send any responses for pending requests in the last 180 seconds.

  • IIS 6.0을 사용 하는 응용 프로그램 로그에 다음과 같은 메시지가 나타납니다.

       Event Type:     Warning   Event Source:   W3SVC-WP   Event Category: None   Event ID:       2262   Date:           5/4/2003   Time:           1:02:33 PM   User:           N/A   Computer:       <ComputerName>   Description:      ISAPI 'C:\Windows\Microsoft.net\Framework\v.1.1.4322\aspnet_isapi.dll' reported itself as      unhealthy for the following reason: 'Deadlock detected'.

  • IIS 6.0을 사용 중인 경우 시스템 로그에 다음과 같은 메시지가 나타납니다.

       Event Type:     Warning   Event Source:   W3SVC   Event Category: None   Event ID:       1013   Date:           5/4/2003   Time:           1:03:47 PM   User:           N/A   Computer:       <ComputerName>   Description:      A process serving application pool 'DefaultAppPool' exceeded time limits during shut down.      The process id was '<xxxx>'.

HttpWebRequest.GetResponse 메서드를 호출할 때 다음과 같은 예외 오류 메시지가 나타날 수도 있습니다.
"System.InvalidOperationException: 작업을 완료 하는 ThreadPool 개체에 사용 가능한 스레드가 부족할 되지 않았습니다."
브라우저에서 다음과 같은 예외 오류 메시지가 나타날 수도 있습니다.
"HttpException (0x80004005): 요청 시간이 초과 되었습니다."
참고: 이 문서는 직접 HttpWebRequest 요청 하는 응용 프로그램에도 적용 됩니다.
원인
이 문제는 ASP.NET 작업자 스레드와 완료 포트 스레드 호출 요청을 실행 하는 데 사용할 수 있는 수를 제한 하기 때문에 발생할 수 있습니다.

일반적으로 웹 서비스에 대 한 호출 요청을 보내는 코드를 실행 하는 데 한 작업자 스레드 및 웹 서비스에서 콜백을 받는 데 한 완료 포트 스레드를 사용 합니다. 그러나 요청이 리디렉션되거나 인증을 요구를 하는 경우 호출은 두 작업자 스레드와 두 완료 포트 스레드를 사용할 수 있습니다. 따라서 여러 웹 서비스 호출이 동시에 발생 하는 경우 관리 되는 ThreadPool 소모 될 수 있습니다.

예를 들어, ThreadPool이 10 개의 작업자 스레드로 제한 되어 있고는 10 명의 작업자 스레드가 모두 현재 실행은 콜백 실행을 기다리는 코드를 가정 합니다. 작업 항목을 ThreadPool에 큐에 대기 중인 스레드를 사용할 수 있게 될 때까지 차단 되어 콜백이 실행 될 수 있습니다.

경쟁의 다른 가능한 원인 System.Net 네임 스페이스를 사용 하 여 연결 수 제한 maxconnection 매개 변수입니다. 일반적으로이 제한은 예상 대로 작동 합니다. 그러나 대부분의 응용 프로그램을 동시에 단일 IP 주소에 여러 요청을 수행 하려고 하는 경우 스레드 사용 가능한 연결을 기다리는 할 수 있습니다.
해결 방법
이러한 문제를 해결 하려면 해당 상황에 가장 잘 맞도록 Machine.config 파일에 다음 매개 변수를 조정할 수 있습니다.
  • maxWorkerThreads
  • minWorkerThreads
  • maxIoThreads
  • minFreeThreads
  • minLocalRequestFreeThreads
  • maxconnection
  • executionTimeout
이러한 문제를 해결 하려면 다음 작업을 수행 합니다.
  • CPU 당 약 12 동시에 실행할 수 있는 ASP.NET 요청 수를 제한 합니다.
  • 웹 서비스 콜백이 ThreadPool의 스레드를 자유롭게 사용할 수 있습니다.
  • Maxconnections 매개 변수에 대 한 적절 한 값을 선택 합니다. 선택을 기준으로 사용 되는 IP 주소 andAppDomains 수 있습니다.
참고: CPU 당 12에 대 한 ASP.NET 요청 수를 제한 하도록 한 권장 사항은 약간 임의적입니다. 그러나이 제한은 대부분의 응용 프로그램에서 잘 작동 하도록 입증 되었습니다.

maxWorkerThreadsmaxIoThreads

ASP.NET는 작업자 스레드와 완료 스레드의 사용 되는 최대 수를 제한 하려면 다음 두 구성 설정을 사용 합니다.
<processModel maxWorkerThreads="20" maxIoThreads="20">
MaxWorkerThreads 매개 변수와 maxIoThreads 매개 변수는 암시적으로 cpu 수로 계산 됩니다. 예를 들어, 두 프로세서가 있는 경우 작업자 스레드의 최대 수는 다음과 같습니다.
2 * maxWorkerThreads

minFreeThreadsminLocalRequestFreeThreads

ASP.NET은 작업자 스레드와 완료 포트 스레드 수는 원격 요청이 나 로컬 요청을 시작 하는 데 사용할 수 있어야 결정 하는 다음 구성 설정을 포함 합니다.
<httpRuntime minFreeThreads="8" minLocalRequestFreeThreads="8">
있는 충분 한 스레드를 사용할 수 없는 충분 한 스레드는 요청을 하는 때까지 요청이 대기 됩니다. 따라서 ASP.NET 동시 요청 다음 횟수 이상 실행 되지 않습니다.
(maxWorkerThreads*Cpu 수)-minFreeThreads
참고:MinFreeThreads 매개 변수와 minLocalRequestFreeThreads 매개 변수는 암시적으로 cpu 수로 계산 하지.

minWorkerThreads

ASP.NET 1.0 서비스 팩 3 및 ASP.NET 1.1에서는 ASP.NET은 작업자 스레드 수를 원격 요청을 서비스할 즉시 사용할 수 있습니다 결정 하는 다음과 같은 구성 설정이 포함 되어 있습니다.
<processModel minWorkerThreads="1">
이 설정에 의해 제어 되는 스레드는 CLR의 기본 "스레드 조정" 기능 만드는 작업자 스레드보다 훨씬 빠른 속도로 만들 수 있습니다. 이 설정 사용 하면 요청 하는 ASP.NET 서비스에 백 엔드 서버를 채우라는 인해 ASP.NET 요청 대기열 갑자기 채우는 수 있는, 큐에 있는 요청 수를 급격히 증가 발생 시키는 클라이언트 쪽 또는 이와 유사한 요청 갑자기 버스트. MinWorkerThreads 매개 변수에 대 한 기본값은 1입니다. MinWorkerThreads 매개 변수의 값은 다음 값으로 설정 하는 것이 좋습니다.
minWorkerThreads = maxWorkerThreads / 2
기본적으로 minWorkerThreads 매개 변수는 Web.config 파일이 나 Machine.config 파일에 나타나지 않습니다. 이 설정은 암시적으로 Cpu 수 곱합니다.

maxconnection

Maxconnection 매개 변수는 특정 IP 주소에 연결 수를 만들 수 결정 합니다. 매개 변수는 다음과 같이 나타납니다.
<connectionManagement>    <add address="*" maxconnection="2">    <add address="http://65.53.32.230" maxconnection="12"></connectionManagement>
IP 주소 대신 호스트 이름으로 응용 프로그램의 코드 응용 프로그램에서 참조 하는 경우 매개 변수는 다음과 같이 나타나야 합니다.
<connectionManagement>    <add address="*" maxconnection="2">    <add address="http://hostname" maxconnection="12"></connectionManagement>
마지막으로, 80 이외의 포트에서 응용 프로그램이 호스팅되는 경우 해당 매개 변수가 다음과 비슷한 URI에는 표준이 아닌 포트를 포함 하.
<connectionManagement>    <add address="*" maxconnection="2">    <add address="http://hostname:8080" maxconnection="12"></connectionManagement>
이 문서의 앞부분에서 설명한 매개 변수에 대 한 설정은 모두 프로세스 수준에 있습니다. 그러나 maxconnection 매개 변수 설정은 AppDomain 수준에 적용 됩니다. 기본적으로이 설정은 AppDomain 수준에 적용 하기 때문에 만들 수 있습니다 두 개의 연결이 최대 특정 IP 주소에 각 AppDomain에서 프로세스.

executionTimeout

ASP.NET 다음 구성 설정을 사용 하 여 요청 실행 시간 제한:
<httpRuntime executionTimeout="90"/>
또한 Server.ScriptTimeout 속성을 사용 하 여이 제한을 설정할 수 있습니다.

참고:ExecutionTimeout 매개 변수의 값을 늘리면 processModel responseDeadlockInterval 매개 변수 설정을 수정 해야 될 수 있습니다.

권장 사항

모든 응용 프로그램에 대해이 섹션에서 권장 하는 설정을 사용할 수 없습니다. 그러나 다음과 같은 추가 정보를 적절히 조정할 수 있습니다.

각 ASPX 페이지에서 한 IP 주소를 하나의 웹 서비스 호출을 하는 경우 다음 구성 설정을 사용 하는 것이 좋습니다.
  • MaxWorkerThreads 매개 변수와 maxIoThreads 매개 변수의 값을 100으로 설정 합니다.
  • Maxconnection 매개 변수의 값을 설정 합니다. 12 *N (여기서 N Cpu thatyou 수 있는).
  • MinFreeThreads 매개 변수의 값을 설정 합니다. 88 *NminLocalRequestFreeThreads 매개 변수를76 *N.
  • MinWorkerThreads50의 집합 값입니다. 기본적으로 구성 파일에 없으면 minWorkerThreads 를 기억. 추가 해야 합니다.
이러한 권장 사항 중 일부는 서버의 Cpu 수를 다루는 간단한 공식을 포함 됩니다. 공식에서 Cpu 수를 나타내는 변수가입니다. N. 만약 하이퍼스레딩이 활성화되어 있다면, 물리적 CPU 개수가 아닌 논리적 CPU 개수를 사용하도록 설정해야 합니다. 예를 들어, 있는 경우 하이퍼스레딩 사용 하는 프로세서가 4 개인 서버를 사용 하면, 값 N 공식 4대신 8 할 수 있습니다.

참고: 때문에 동시에 최대 CPU 당 12 ASP.NET 요청을 실행할 수 있습니다이 구성을 사용 하는 경우 100-88 = 12. 따라서 최소 88 *N 작업자 스레드와 88 *N 완료 포트 스레드를 다른 용도 (예: 웹 서비스 콜백용) 수 있습니다.

예를 들어, 4 개의 프로세서와 하이퍼스레딩을 사용할 수 있습니다 서버가 있습니다. 이러한 수식에 따라,이 문서에서 설명 하는 구성 설정에 대해 다음 값을 사용 합니다.
<system.web>	<processModel maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50"/>	<httpRuntime minFreeThreads="704" minLocalRequestFreeThreads="608"/></system.web><system.net>	<connectionManagement>		<add address="[ProvideIPHere]" maxconnection="96"/>	</connectionManagement></system.net>

또한이 구성을 사용 하면 연결 12 각 AppDomain에 IP 주소당 CPU 당 사용할 수 있습니다. 따라서 다음과 같은 경우 매우 적은 연결이 발생 요청 연결을 대기 하는 ThreadPool이 소모 되지 않은 경우:
  • 웹 응용 프로그램을 (AppDomain) 하나만 호스팅합니다.
  • ASPX 페이지의 각 요청이 한 웹 서비스만 요청을 만듭니다.
  • 모든 요청은 동일한 IP 주소.
그러나이 구성을 사용 하는 경우 다음 중 하나를 포함 하는 시나리오는 사용 연결이 너무 많습니다.
  • 여러 개의 IP 주소로 요청은.
  • 요청이 리디렉션됩니다 (302 상태 코드)는.
  • 요청이 인증을 요구 합니다.
  • 요청이 여러 Appdomain에서 수행 됩니다.
이 시나리오에서는 maxconnection 매개 변수 및 minFreeThreads 매개 변수와 minLocalRequestFreeThreads 매개 변수에 대 한 값이 높을수록 더 낮은 값을 사용 하 여 것이 좋습니다.
현재 상태
이 동작은 의도된 것입니다.
추가 정보
성능 저하와 함께 ASP.NET IIS 7.0에 대 한 경합이 발생 하는 경우 다음 Microsoft 블로그 이동.
참조
자세한 내용은 다음 Microsoft Developer Network (MSDN) 웹 사이트로 이동:

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 821268 - 마지막 검토: 07/03/2016 15:34:00 - 수정: 2.0

Microsoft .NET Framework 2.0, Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0

  • kbprb kbmt KB821268 KbMtko
피드백
"> tml>> > var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("