2010-05-12 5 views
2

웹 사이트의 OutOfMemory 원인을 추적하려고합니다. 이 사이트에는 ~ 12,000 개의 .aspx 페이지가 있으며 마지막으로 충돌이 발생하여 adplus를 사용하여 메모리 덤프를 캡처했습니다.ASP.Net : OutOfMemoryExpcetions의 원인 찾기

많은 연구 끝에 발견 할 수없는 약 100MB의 Free 블록이 있습니다. 대형 개체 힙 중 더 깊은 것을 파헤 치면 원인이 문자열 인 것처럼 보입니다. [여기] [1]

사이트의 페이지 수로 인해 발생할 수 있습니까? 그들은 모두 집계되어 추억 속에 앉아 있고, 쓰레기통을 보면서 그들은 억눌러지며 잠시 머물러 있다는 것을 의미한다고 생각합니다.

더 많은 페이지가있는 많은 사이트가 있기 때문에 이상하게 느껴질 수 있지만 동적 컴파일은 메모리 증가를 설명 할 수 있습니다.

메모리 누수의 원인을 찾기위한 다른 방법은 무엇입니까? 정지 모드에서 adplus를 사용하여 덤프를 캡처하려고 시도했지만 실패하고 IIS 작업자 프로세스가 재활용됩니다.

[1] : Large Object Heap Fragmentation

답변

0

네 조각화가 '발견'메모리에 더 어려울 것이기 때문에 이유 중 하나입니다 •.

매우 알려진 단서 : 32 비트 OS에

  • , 당신의 작업자 프로세스는 시스템이 더 많은 경우에도 메모리에 2GB를 초과 할 수 없습니다. 대안으로/3GB 스위치 (boot.ini 파일)가 있습니다.

  • "Process \ Virtual Bytes"가 600MB의 가상 주소 공간 제한 (일반적으로 2GB) 내에있을 때 OutOfMemoryException이 발생할 가능성이 극적으로 증가하고 두 번째로 "Process \ Virtual Bytes "종종"프로세스 \ 개인 바이트 "600 MB보다 큰 것입니다.

  • CLR은 블록 단위로 메모리를 할당하고 처리합니다 (메모리에서 64MB). 그것은이 모든 메모리를 사용한다는 의미는 아니며, 1 바이트가 사용될 때까지 한 블록이 해제되지 않고 메모리가 조각화되는 방법을 의미합니다.

  • CLR이 메모리를 할당 할 수없고 (새 블록이 필요함) 가비지 수집이나 메모리 일부를 페이징 할 수없는 경우 OutOfMemoryException이 최상의 경우에 발생하거나 서버가 최악의 경우.

  • 동적 컴파일에 대해 사실이지만 가장 중요한 것은 <compilation debug="false" />/<deployment retail=”true”/> 스위치입니다. 이들은 가상 공간 분할을 일으키는 '페이지'당 하나의 DLL이 아니라 디렉토리별로 하나의 DLL (다른 지점)을 의미하는 일괄 컴파일을 켭니다.

  • 배치 컴파일, 더 많은 디렉토리/하위 디렉토리, 더 많은 DLL과 더 세분화 된 가상 주소 공간이있는 디렉토리로 약 DLL 하나.

개인적으로 ANTS 메모리 프로파일 러를 사용하여 메모리 문제를 찾습니다.

+0

컴파일 디버그 설정에 대한 알림을 보내 주셔서 감사합니다. 문제가 될 것입니다. –

0

ASP.NET 응용 프로그램을 개발하는 동안 메모리 문제 및 기타 유형의 디버깅 문제에 대해 이야기하는 Tess Ferrandez의 매우 좋은 블로그 here이 있습니다.

특히 post 중 하나는 누출 여부를 확인하기 위해 자습서를 안내합니다. 그것은 불쾌한 WinDBG를 사용하지만 모든 명령을 설명하므로 사용 된 메모리를 명확하게 파악할 수 있으며 모든 개체가 어떤 공간을 채우고 있는지 정확히 보여줍니다.

나는 그녀의 사이트를 여러 번 사용하여 메모리 누수 및 기타 성능 관련 문제를 진단했습니다.

나는 또한 DebugDiag과 같은 도구를 사용하여 메모리 관련 문제를 캡처하고 문제를 찾는 데 도움이되는 진단 도구를 내장했습니다.

+0

테스 페 렌데 즈 (Tess Ferrandez)는 주제, 훌륭한 블로그 글에 대한 책을 저술해야합니다. 메모리 누수 링크를 이용해 주셔서 감사합니다. –