기본 콘텐츠로 건너뛰기

추천 가젯

OOM(OutOfMemory) 분석 방법

많은 시스템에서 메모리 문제로 인한 프로세스 다운현상 등의  심각한 장애를 경험한 사례가 있을 것이다.  Java에서는 C와는 달리  가비지컬렉터(Garbage Collector)로 메모리를 관리하기 때문에 개발자의 실수로 인한 메모리릭  발생은 상대적으로 줄어들었다. 하지만 가비지컬렉터가 새로운 객체를 생성할 공간을 더이상 만들지 못하고, Heap 영역 메모리도 더이상 늘어날 수 없는 상황이 발생하게 되면 Java에서는 OutOfMemoryError를 발생시킨다.  물론 네이티브 할당의 문제로 OutOfMemoryError가 발생하는 경우도 있지만 이는 발생확률이 굉장히 낮고, 시스템에서 사용되는 어떠한 객체가 Heap영역을 점유하면서 발생하는 경우가 일반적이다.  지금부터 대규모 시스템에서 OutOfMemoryError 발생 시 빠른 대응을 하기 위해서 모니터링할 수 있는 방법 및 OutOfMemoryError가 발생한 이유를 분석하는 방법에 대해서 알아 보겠다. (이하 OutOfMemoryError를 OOM으로 대체한다.) ► 모니터링   시스템을 운영하다보면, 특히 오픈한지 얼마 안된 시스템의 경우 문제가 발생하는 경우가 종종 발생한다. 이 때 문제가 어디서 발생했는지를 빠르게 찾아 내야 시스템을 신속하게 정상화 시킬 수 있고, 동일 문제의 재발방지를 위한 조치를 빠르게 할 수 있다.  장애가 발생시 문제가 OOM인지 확인하기 위해서 필자는 OOM 분석을 위한 간단한 Server모니터링 프로그램을 작성하였다.  물론 운영하는 System에 APM Tool을 사용하고 있다면, APM Tool에서 이상상황을 알려주는 경우가 많다. Jennifer의 경우 OOM발생시 DashBoard의 경보목록에서 Process down메시지와 OutOfMemory 메시지를 보여준다.   APM이 없을경우 JVM Option을 통한 Log - 프로세스 ...

최근 글