2011-04-26 4 views
2

데이터 작업을위한 HttpRuntime.Cache에 데이터 집합을 저장할 응용 프로그램이 있습니다 (데이터 집합이 xml로 저장되는 경우 20MB의 데이터).HttpRuntime.Cache를 사용하여 웹 응용 프로그램 메모리 사용

IIS 사이트 기반 출력 캐싱이 활성화 된 새 Windows 2008 서버 x64로 마이그레이션했습니다. 우리의 응용 프로그램 풀도 x64 모드로 설정됩니다. 모두 잘 돌아 갔고, 응용 프로그램은 심각한 부하로 약 2GB의 메모리 사용으로 실행되었습니다.

응용 프로그램을 변경하지 않고도 트래픽을 추가하지 않으면 응용 프로그램이 서버의 모든 메모리를 먹어 버리기 시작했습니다. 현재는 7GB입니다.

출력 캐싱을 사용하지 않으려했지만 전혀 도움이되지 않았습니다. 이 문제를 해결할 수있는 유일한 방법은 응용 프로그램 풀을 재활용하는 것이지만이 솔루션을 사용하면 모든 사용자 세션이 손실 될 수 있습니다.

제 생각에 HttpRuntime.Cache 항목은 응용 프로그램 풀의 전역입니다. 응용 프로그램로드 이벤트에서 캐시에 항목을 삽입하기 만하므로 캐시 항목은 변경되지 않아야합니다.

출력 캐시가 비활성화되고 캐시에 추가 삽입이 없으면 예기치 않은 메모리 증가가 발생할 수 있습니까?

+0

작업 관리자 (성능 -> 리소스 모니터)를 점검하여 메모리를 많이 차지하는 것을 확인 했으므로 (메모리를 보유하고있는 SQL이 아닌 것으로 확신 할 수 있도록)? 데이터베이스가 동일한 서버에서 실행되고 있습니까? 메모리가 사용 중이거나 대기 중입니까? – Ivo

+0

안녕하세요, 데이터 집합은 WebServices를 통해 채워집니다.이 설정에는 데이터베이스 서버가 없습니다. 메모리는 사용중인 상태 여야합니다. 5-20MB/s의 속도로 5-12 %의 CPU 사용률을 유지해야 설정 한 7GB 재활용 한계에 도달 할 수 있습니다. – balint

답변

1

큰 개체 힙에 문제가있는 것 같습니다. 버전 1.0 이후 .NET 가비지 컬렉터는 메모리에서 큰 객체를 수집하지 못하는 것으로 유명합니다. 상황은 .net 버전으로 향상되었지만 특히로드가 많은 서버에는 여전히 문제가 있습니다. 이 기사를 확인 문제를 사귀어 : 또한 문제가 나타날 것입니다 있는지 확인하기 위해 개발 서버의 응용 프로그램 메모리 프로파일 시도 할 수

http://msdn.microsoft.com/en-us/magazine/cc534993.aspx
http://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/
http://www.alexatnet.com/content/net-memory-management-and-garbage-collector

.

관련 문제