Out of Memory (OOM)
Out of Memory (OOM) 오류가 발생하는 이유와 관련된 totalJSHeapSize, usedJSHeapSize, jsHeapSizeLimit 세 가지 값의 관계는 자바스크립트 엔진에서 메모리 할당 및 사용 상태를 추적하는 중요한 지표입니다. 이 값들은 메모리 부족(Out of Memory, OOM) 오류가 발생하는 조건을 이해하는 데 핵심적인 역할을 합니다.
1. 셋 관계 설명
이 세 값은 다음과 같은 관계를 가집니다:
- usedJSHeapSize ≤ totalJSHeapSize ≤ jsHeapSizeLimit
2. 각 값의 의미
- usedJSHeapSize (사용된 힙 메모리 크기)
- 현재 자바스크립트 코드가 실제로 사용 중인 메모리의 크기를 나타냅니다. 이는 실제로 할당된 객체, 배열, 함수 등에서 사용되고 있는 메모리입니다.
- 이 값이 커지면, 메모리 할당이 계속 증가하는 상황을 의미하며, 메모리 부족(Out of Memory, OOM) 상태로 이어질 수 있습니다.
- totalJSHeapSize (전체 힙 메모리 크기)
- 자바스크립트 엔진이 현재 할당한 전체 메모리의 크기를 나타냅니다. usedJSHeapSize는 이 값보다 작거나 같아야 하며, 이 값은 메모리 할당 상태를 나타냅니다.
- 이 값이 증가하면 전체 할당된 메모리가 늘어났다는 뜻으로, 메모리 사용량이 높아지고 있다는 신호입니다.
- jsHeapSizeLimit (최대 힙 메모리 크기)
- 자바스크립트 엔진이 사용할 수 있는 최대 메모리의 크기를 나타냅니다. 이 값은 브라우저나 자바스크립트 엔진에서 설정된 메모리 제한을 의미합니다.
- 이 값은 자바스크립트 엔진이 메모리를 더 이상 할당할 수 있는 한도를 정의하며, 이를 초과하면 Out of Memory (OOM) 오류가 발생합니다.
3. OOM 발생과 관련된 조건
OOM 오류가 발생하는 상황은 **usedJSHeapSize**가 **totalJSHeapSize**에 가까워지고, 이 값이 **jsHeapSizeLimit**에 근접하거나 초과할 때입니다. 이 관계를 바탕으로 OOM이 발생하는 조건을 이해할 수 있습니다.
- usedJSHeapSize가 증가: 자바스크립트가 메모리 객체를 계속 할당하고, 그 객체들이 더 이상 사용되지 않더라도 참조가 남아 있으면 usedJSHeapSize는 계속 증가합니다. 예를 들어, 메모리 누수가 발생하면 사용되지 않는 객체나 배열이 계속 메모리에 남아서 usedJSHeapSize를 증가시킬 수 있습니다.
- totalJSHeapSize가 jsHeapSizeLimit에 근접: 만약 **totalJSHeapSize**가 브라우저가 할당할 수 있는 최대 메모리 크기인 **jsHeapSizeLimit**에 가까워지면, 더 이상 메모리를 할당할 수 없습니다. 이 시점에서 OOM 오류가 발생합니다.
4. OOM 발생 시점
OOM 오류는 대개 다음과 같은 상황에서 발생합니다:
- 메모리 할당 초과: totalJSHeapSize가 jsHeapSizeLimit에 도달하거나 초과하면, 더 이상 자바스크립트 힙에 메모리를 할당할 수 없습니다. 이때 usedJSHeapSize가 계속해서 증가하면, Out of Memory 오류가 발생합니다.
- 사용 중인 메모리 증가: usedJSHeapSize가 totalJSHeapSize와 가까워질수록, 자바스크립트 엔진이 메모리를 할당할 수 있는 여유가 줄어듭니다. 메모리 누수나 불필요한 객체 참조로 인해 메모리 사용량이 계속 증가하면, OOM 오류가 발생할 수 있습니다.
5. 요약
- usedJSHeapSize: 현재 사용 중인 메모리의 크기 (실제 사용되는 메모리)
- totalJSHeapSize: 자바스크립트 엔진이 할당한 전체 메모리 크기
- jsHeapSizeLimit: 자바스크립트 엔진이 사용할 수 있는 최대 메모리 크기
OOM 오류는 **usedJSHeapSize**가 **totalJSHeapSize**에 근접하거나, **totalJSHeapSize**가 **jsHeapSizeLimit**에 도달할 때 발생합니다. 메모리 누수나 무한히 많은 객체 할당 등이 이 문제를 일으킬 수 있습니다.
반응형
'웹 개발 > 🌐 JavaScript' 카테고리의 다른 글
구조 분해 할당 (0) | 2025.04.28 |
---|---|
JavaScript의 reduce 함수 완벽 가이드 (0) | 2025.03.13 |
Javascript에서 호출스택과 태스크큐의 관계 (0) | 2025.02.03 |
JQMIGRATE:jQuery.fn.load() is deprecated 해결 (0) | 2024.08.27 |
eChart 메모리 누수 잡는법 (0) | 2024.08.22 |