2011-03-03 2 views
12

각 요청 동안 메모리 누수가 적은 ASP.NET (4.0) 웹 응용 프로그램이 있습니다. 아주 적은 양으로 대부분의 사용 사례에서 한 번에 몇 주 또는 몇 달 동안 문제가되지 않습니다. 나는 일반적으로 응용 프로그램에 의해 관리되는 모든 연결을 닫고 상태 변수 (또는 내 싱글 톤의 인스턴스 변수) 등을 피하는 것이 좋습니다.ASP.NET 응용 프로그램 풀을 자동 재활용으로 설정해야합니까?

제 질문은 - ASP.NET 응용 프로그램의 경우 정상적인 동작입니까? 유휴중인 20 분 후에 응용 프로그램 풀 재활용 기본 (IIS 7) 동작을 해제했다. 응용 프로그램이 내부 캐시를 작성하는 데 몇 분이 걸리고 사용자 환경에 부정적인 영향을 미치지 않도록하고 (요청을 발행 할 때 응용 프로그램이 시작될 때까지 기다리는 것이 필요하기 때문에)이 작업을 수행합니다.

캐시를 직렬화하거나 캐시 생성 프로세스의 속도를 높이면이 문제를 완화 할 수 있다는 것을 알고 있지만 내 질문에 대한 원칙이 더 있습니다. 개인적으로 붕대 접근 방식으로 IIS 자동 재활용 기능을 사용하는 것이 좋습니다. . 내가 잘못? 응용 프로그램의 메모리 사용량이 사용 가능한 메모리 양에 비해 충분히 높지 않기 때문에 가비지 수집기가 작동하지 않는 것입니까? 아니면 메모리 문제를 더 깊이 파고해야합니까?

어떤 통찰력도 인정 될 것입니다.

+0

메모리 누수 문제 - 모든 일회용 (IDispose) 개체를 처리해야합니다. Gendarme (http://www.mono-project.com/Gendarme)와 같은 정적 코드 분석 도구를 사용하여 코드에서 이러한 유형의 문제를 찾거나 런타임 프로파일 러를 사용하여 런타임에 이러한 문제를 트랩 할 수 있습니다. –

답변

8

불행히도 은 일반적으로입니다.하지만 대부분은 대충 응용 프로그램 작성자에게 지급됩니다.

기본적으로 IIS는 새로 만든 응용 프로그램 풀을 1740 분마다 재활용하도록 구성합니다.

당신이 말했듯이, 이것은 반창고입니다. 리소스를 모두 지우는 (잘린 이벤트 처리기 포함) 잘 작성된 응용 프로그램은 전혀 유출되지 않아야합니다.

제목에 대한 블로그 게시물 this을 참조하십시오.

관련 문제