우리 모두 알고 있듯이 24*7 실행되는 애플리케이션을 구현하는 것은 쉽지 않습니다. 내 프로젝트 중 하나는 폭력적인 부하로 인해 20시간 이상 지속되었지만 여전히 영웅적으로 사망했습니다. 다행스럽게도 ASP.NET과 IIS는 매우 안정적인 .Net 응용 프로그램을 쉽게 구축할 수 있는 몇 가지 쉬운 기능을 제공합니다. 다만, 조금 아쉬운 점은 Windows 2000(IIS6.0 이하 버전)과 Windows 2003(IIS6.0) 시스템에서의 구성 방법이 다르다는 점입니다.
먼저 Windows 2000 시스템에 대해 이야기해 보겠습니다. ASP.NET에 익숙한 사람들은 모두 machine.config 파일을 알고 있을 것입니다. 이 파일은 %WindowPath%Microsoft.NetFramework%.NetVersion%CONFIG 디렉터리에 저장되어 있습니다. 텍스트 편집기(물론 가장 많이 사용되는 편집기는 "메모장")를 사용하여 파일을 열고 <processModel...> 섹션을 찾으세요. ASP.NET은 이 섹션의 설정에 따라 ASP.NET 서비스 프로세스(aspnet_wp.exe 또는 w3wp.ext)를 제어합니다. 우리가 작성한 ASP.NET 애플리케이션 코드는 이 프로세스 공간에서 실행됩니다. Framework 1.1을 사용하는 경우 이 섹션에서 n개 이상의 속성을 볼 수 있습니다. 우리는 다음 세 가지 속성에 관심이 있으며 그 뒤에는 등호가 기본값입니다.
timeout="Infinite"
dleTimeout="Infinite"
memoryLimit="60"
Framework 2.0에서는 볼 수 없지만 수동으로 추가할 수 있습니다.
이 세 가지 속성의 의미를 해석해 보겠습니다. timeout으로 지정된 시간 동안 계속 실행한 후 ASP.NET 서비스 프로세스를 다시 시작합니다. timeout의 기본값은 "HH:MM:SS" 형식으로 재설정할 수 있습니다. " 예를 들어 timeout=24:00:00은 24시간 후에 다시 시작한다는 의미이며,dleTimeout에 지정된 시간 내에 아무도 액세스하지 않으면 ASP.NET 서비스 프로세스를 다시 시작합니다.dleTimeout의 기본값도 무한하며 설정 방법은 다음과 같습니다. 위와 같습니다. 전체 시스템 메모리 중 ASP.NET 서비스 프로세스에서 사용하는 메모리 비율이 memoryLimit에 지정된 양을 초과하는 경우 ASP.NET 서비스 프로세스가 다시 시작됩니다.
이 세 가지 속성의 협력을 통해 서비스 프로세스가 자신도 모르게 다시 시작될 수 있으므로 애플리케이션이 계속 실행될 수 있음을 이해하십시오. 내가 이것을 말할 때 주의 깊은 독자들은 서비스 프로세스가 다시 시작되면 필연적으로 클라이언트의 세션이 손실되고 사용자의 작업이 중단된다는 점을 발견했을 것입니다. '신도 모르고 귀신도 모른다'는 것을 어떻게 이룰 수 있습니까?
이 문제는 존재하지만 다음 조치를 통해 그 영향을 최소화하거나 완전히 제거할 수 있습니다.
먼저,dleTimeout을 합리적인 값으로 설정할 수 있습니다. 일반적으로 세션 시간 초과 설정의 1.5-1.5로 3회 설정합니다. 프로그램이 지속될 수 있는 상한선을 설정합니다. 저는 보통 24시간으로 설정합니다. 이렇게 하면 유휴 상태일 때 서비스 프로세스가 강제로 다시 시작됩니다. 현재 세션이 없으므로 사용자 작업을 중단하는 것은 불가능합니다. 이 설정은 기본적으로 근무 시간 이후에는 접속이 불가능하기 때문에 중소기업의 사무실 환경에서 매우 효과적입니다.
물론 위의 방법에는 큰 한계가 있으며 특정 상황에서만 작동할 수 있습니다. 메모리가 한도를 초과한 상태에서 누군가 계속 액세스하거나 다시 시작하면 사용자의 작업이 여전히 방해를 받게 됩니다. 궁극적인 해결책은 세션 상태를 별도의 프로세스에 저장하는 것입니다. ASP.Net에서는 간단한 구성으로도 가능합니다.
출처 : BLOG 녹음실