Friday, February 10, 2012
Retabbed
Login | Register
블로그
  Search
블로그 목록
블로그 아카이브
블로그 검색
ASP.NET과 OutOfMemory Exception
Location: Blogs불나방의 소프트 블로그    
Posted by: 불나방 2007-08-25 오전 8:05

.NET은 기본적으로 Garbage Collector가 있지만 어플리케이션이 커져감에 따라 또 속도를 위해서 캐쉬를 많이 사용하다 보면 어느 순간엔가 OutOfMemory Exception이 발생하게 된다. 몇일 만일 수도 있고 몇 주일 만일 수도 있다. 이런경우 프로그램을 정교하게 튜닝하여 모든 메모리 릭을 제거할 수있으면 좋지만 현실은 그러하지 못하다. 대부분의 프로그램이 자신만의 코드로 되기도 어렵고 굳이 그렇게 할 필요도 없다.

ASP.NET 1.1은 OutOfMemory Exception이 발생하면 오류를 내고 어플리케이션이 멈춰 버린다. 즉 서비스가 중단된다. ASP.NET 2.0은 어플리케이션이 어떤 경우이던 행이 되었다고 생각되면 어플리케이션을 리사이클(프로그램을 새로 시작한다고 보면 맞다) 한다. 어느 경우이던 서비스가 중단되는 사태가 발생하므로 미리 막아야 한다. Machine.config에 보면 processModel이라는 섹션이 있다. 기본으로는

<processModel autoConfig="true"/>

라고 되어 있는데 아무것도 안한다는 얘기다. OutOfMemory Exception이 발생하기전에 미리 감지하여 어플리케이션을 리사이클 하려면 아래와 같이 설정한다.

<processModel enable="true" memoryLimit="60"/>

전에 시스템 메모리의 60%이상을 ASP.NET(aspnet_wp)가 차지하면 어플리케이션들을 모두 리사이클 시키라는 것이다. 여기서 한가지 주의할 점은 ASP.NET의 메모리 사용한도가 2G라는 것이다.(32비트 OS의 경우에 그러하다. 64비트는 이런 제약이 없다.) 즉 만약에 시스템에 메모리가  4G가 있다면 위의 설정에 따르면 2.4G가 한도가 되는데 ASP.NET은 2G가 한도이니 여전히 OutOfMemory Exception이 발생하게 된다. 즉 %로 설정을 하므로 최종 한도 값이 2G를 넘으면 안된다는 것이다.(사실 시스템에는 ASP.NET혼자서 실행되고 있는것도 아니므로 실제는 훨씬 더 낮게 설정해야 한다.)

Permalink |  Trackback
Terms | Privacy | host
Copyright 2005 Code99.NET
 | 아티클 | 자료실 | 블로그 | Q&A | 관리자에게