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

기술 자료 번역 기술 자료 번역
기술 자료: 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: 완료 스레드 풀 개체에 사용 가능한 스레드가 부족할 하지 않은 여 작업입니다. "
다음과 같은 예외 오류 메시지가 나타날 수도 있습니다. 브라우저에서:
"HttpException (0x80004005): 요청 시간 아웃입니다. "
참고 이 문서는 HttpWebRequest 요청을 직접 확인 하는 응용 프로그램에도 적용 됩니다.

원인

ASP.NET 제한 때문에이 문제가 발생할 수 있습니다. 작업자 스레드와 완료 포트 스레드 호출 사용 하 여 실행할 수 있습니다 요청 수입니다.

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

예를 들어, Threadpool이 10 개의 작업자 스레드로 제한 되어 있는지 및 10 명의 작업자 스레드가 모두 현재 콜백 실행을 기다리는 코드 실행 되는 경우 콜백이 스레드 사용할 수 있을 때까지 작업 항목을 ThreadPool 대기열에 저장 된 차단 되기 때문에 절대로 실행할 수 있습니다.

다른 잠재적인 경합 System.Net 네임 스페이스를 사용 하 여 연결 수를 제한 하 여 maxconnection 매개 변수입니다. 일반적으로, 이 제한은 예상 대로 작동 합니다. 그러나 많은 응용 프로그램이 많은 만들려고 하면 단일 IP 주소에서 동시에 요청을 스레드를 기다려야 할 수 있습니다. 사용 가능한 연결입니다.

해결 방법

이러한 문제를 해결 하려면 해당 상황에 가장 적합 하는 Machine.config 파일에 다음 매개 변수를 조정할 수 있습니다.
  • maxWorkerThreads
  • minWorkerThreads
  • maxIoThreads
  • minFreeThreads
  • minLocalRequestFreeThreads
  • maxconnection
  • executionTimeout
성공적으로 이러한 문제를 해결 하려면 다음 작업을 수행 합니다.
  • 실행할 수 있는 ASP.NET 요청 수를 제한 합니다. 동시에 CPU 당 약 12입니다.
  • 웹 서비스 콜백이 Threadpool에서 스레드를 자유롭게 사용할 수 있도록 합니다.
  • Maxconnections 매개 변수에 적절 한 값을 선택 합니다. IP 주소 수를 기준으로 선택 하 고 사용 되는 Appdomain입니다.
참고 12 ASP.NET 요청의 수를 제한 하 라는 권장 사항 CPU 당 약간 임의적입니다. 그러나이 제한은 잘 작동 하도록 것으로 입증 되었습니다. 대부분의 응용 프로그램입니다.

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 수준으로 적용 되므로 최대 만들 수 있습니다. 각 Appdomain에 특정 IP 주소에 두 개의 연결을 프로세스입니다.

executionTimeout

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

참고ExecutionTimeout 매개 변수의 값을 늘리면 processModel 수정 할 수 있습니다. responseDeadlockInterval 매개 변수를 설정 합니다.

권장 사항

이 섹션에서는 권장 되는 설정에 대 한 작동 하지 않습니다. 모든 응용 프로그램입니다. 그러나 다음 추가 정보를 도와줄 적절 한 조정을 확인 합니다.

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

참고 이 구성을 사용 하면 최대 12 실행할 수 있습니다. ASP.NET 때문에 동시에 CPU 당 요청 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 연결 가능 CPU 당 당 각 Appdomain에 대 한 IP 주소입니다. 따라서 다음에 대기 중인 요청, 매우 적은 경우 연결과 ThreadPool 없습니다 없습니다.
  • 웹 응용 프로그램을 하나만 (AppDomain)를 호스팅합니다.
  • ASPX 페이지의 각 요청이 한 웹 서비스만 요청을 수 있습니다.
  • 모든 요청이 같은 IP 주소를 있습니다.
그러나이 구성을 사용 하면 시나리오를 포함 다음 중 하나를 아마도 연결이 너무 많이 사용 합니다.
  • 요청이 여러 IP 주소를 있습니다.
  • 요청이 리디렉션됩니다 (302 상태 코드)입니다.
  • 요청이 인증을 요구 합니다.
  • 요청이 여러 Appdomain에서 수행 됩니다.
이러한 시나리오의 경우 낮은 값을 사용 하는 것이 좋습니다 것이 maxconnection 매개 변수와 minFreeThreads 매개 변수와 minLocalRequestFreeThreads 매개 변수에 대 한 값이 클수록.

현재 상태

이 설계 된 동작이입니다.

추가 정보

성능 저하와 함께 ASP.NET IIS 7.0에 대 한 경합이 발생 하는 경우 다음 Microsoft 블로그를 방문 하십시오.
IIS 7.5, IIS 7.0 및 IIS 6.0에서 ASP.NET 스레드 사용

IIS 7.0의에서 ASP.net 중단

참조

자세한 내용은 다음 Microsoft Developer Network (MSDN) 웹 사이트를 참조 하십시오.
ASP.NET 성능 향상

속성

기술 자료: 821268 - 마지막 검토: 2013년 2월 6일 수요일 - 수정: 1.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft .NET Framework 2.0
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
키워드:?
kbprb kbmt KB821268 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
이 문서의 영문 버전 보기:821268

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com