학습목표
- 요구 페이징의 개념과 페이지 교체 알고리즘을 이해한다
- 스래싱과 그를 해결하기 위한 프레임 할당에 대해 이해한다
배경
메모리 관리자는 크게 3가지 역할을 한다
가져오기정책: 프로세스가 필요로 하는 데이터를 언제 메모리로 가져올지 결정함
배치 정책: 가져온 프로세스를 메모리의 어느 위치에 올려놓을지 결정함(페이징, 세그먼테이션)
재배치 정책: 메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 내보낼지 결정함
요구 페이징
배경
- 운영체제는 프로세스들이 한정된 메모리를 효율적으로 이용할 수 있도록 기존에 메모리에 적재된 불필요한 페이지를 선별하여 보조기억장치로 내보낼 수 있어야함
- 프로세스들에 적절한 수의 프레임을 할당하여 페이지를 할당할 수 있게 해야함
개요
- 요구 페이징이란 프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법
기본 양상은 다음과 같음
1. CPU가 특정 페이지에 접근하는 명령어를 실행
2. 해당 페이지가 현재 메모리에 있을 경우(유효 비트가 1일경우) CPU는 페이지가 적재된 프레임에 접근
3. 해당 페이지가 현재 메모리에 없을 경우(유효 비트가 0일경우) 페이지 폴트가 발생
4. 페이지 폴트 처리 륀은 해당 페이지를 메모리로 적재하고 유효 비트를 1로 설정
5. 다시 1번을 수행
페이지 폴트
-
페이지 폴트는 가상 메모리 시스템에서 프로세스가 요구하는 페이지가 물리적 메모리(RAM)에 없을 때 발생하는 현상입니다.
-
이때, 운영체제는 해당 페이지를 보조 저장 장치(주로 하드 디스크)에서 찾아 물리적 메모리로 가져와야 합니다. 페이지 폴트는 가상 메모리 시스템을 가능하게 하는 핵심 메커니즘 중 하나로, 물리적 메모리 용량을 초과하는 프로그램을 실행할 수 있게 해줍니다.
위와 같은 요구 페이징 시스템을 안정적이게 작동하려면 다음 두 가지를 해결해야함
1. 페이지 교체
2. 프레임 할당
페이지 교체 알고리즘
배경
- 요구 페이징 기법으로 페이지들을 적재하다 보면 메모리가 가득 차는 순간이 옴
이때 실행에 필요한 페이지를 적재하기 위해 메모리에 적재된 페이지를 보조기억장치로 내보내야함
어떤 페이지를 내보낼지 결정하는 방법이 페이지 교체 알고리즘임
FIFO 페이지 교체 알고리즘

최적 페이지 교체 알고리즘

- 최적 페이지 교체 알고리즘의 경우 보조기억장치로 내보내야 할 페이지는 앞으로 사용 빈도가 가장 낮은 페이지이므로, 앞으로의 사용빈도가 가장 낮은 페이지를 교체하는 알고리즘
- 최적 페이지 교체 알고리즘은 이름 그대로 가장 낮은 페이지 폴트율을 보장하는 알고리즘임
LRU 페이지교체 알고리즘

LRU 페이지 교체 알고리즘의 정의 및 개념
- LRU 페이지 교체 알고리즘은 "가장 오랫동안 사용되지 않은 페이지를 교체하는 방법"으로 정의됩니다. 이 알고리즘은 가장 최근에 사용된 페이지가 미래에도 다시 사용될 가능성이 높다는 가정 하에 작동합니다.
필요성
- 메모리 내의 페이지 교체 결정은 시스템의 성능에 직접적인 영향을 미칩니다.
- 비효율적인 페이지 교체는 빈번한 디스크 I/O를 발생시켜 시스템의 전반적인 성능을 저하시킬 수 있습니다.
- LRU 알고리즘은 이러한 비효율성을 최소화하기 위해 고안되었습니다.
사용 시기 및 방법
- LRU 알고리즘은 시스템이 메모리 관리를 수행할 때, 특히 멀티태스킹 환경에서 여러 프로세스가 동시에 실행될 때 사용됩니다.
- 메모리에 접근하는 각 페이지마다 타임스탬프를 기록하거나, 페이지의 사용 순서를 유지하는 큐를 사용하여 어떤 페이지가 가장 오래 전에 사용되었는지 판단합니다.
작동 방식
- 페이지 참조 시, 해당 페이지가 메모리에 있다면, 이를 참조 순서대로 가장 앞으로 가져옵니다.
- 새로운 페이지를 메모리에 적재해야 하고 메모리가 가득 찼다면, 가장 오래 전에 사용된 페이지(즉, 리스트 또는 큐의 가장 뒤에 위치한 페이지)를 교체합니다.
문제점 및 해결 방안
문제점
- LRU 알고리즘을 정확히 구현하기 위해서는 각 페이지의 접근 순서를 정확히 기록해야 하며, 이는 추가적인 메모리 사용과 처리 시간을 요구합니다.
해결 방안
- 실제 시스템에서는 LRU의 근사 알고리즘을 사용하여 이 문제를 해결할 수 있습니다. 예를 들어, LFU(Least Frequently Used)나 LRU-K 같은 변형 알고리즘을 사용하여 비슷한 성능을 달성하면서 계산량을 줄일 수 있습니다.
사용 예시
- 웹 브라우저 캐싱에서 LRU 알고리즘이 사용될 수 있습니다. 브라우저는 제한된 캐시 공간을 가지고 있으며, 사용자가 웹사이트를 탐색할 때마다 다수의 웹 페이지와 객체들이 캐시에 저장됩니다.
- 이때, LRU 알고리즘을 사용하여 가장 오래 전에 참조된 캐시된 항목을 제거하고 새로운 항목을 저장함으로써, 캐시의 효율성을 최대화할 수 있습니다.
스레싱과 프레임 할당



스레싱
배경:
- 가상 메모리 시스템에서, 프로그램은 실제 물리 메모리보다 더 많은 메모리를 사용할 수 있습니다. 그러나, 너무 많은 프로그램이 동시에 실행되거나 메모리 사용이 과도하게 늘어나면, 시스템은 빈번한 페이지 교체로 인해 실제 유용한 작업보다 페이지 교체에 더 많은 시간을 소비하게 됩니다.
- 혹은 프로세스가 사용할 수 있는 프레임 수가 적어도 페이지 폴트가 자주 발생할 수 있음
정의:
- 스레싱(Thrashing)은 시스템이 페이지 교체로 인해 과도한 시간을 소비하여 실제 유용한 작업의 처리 속도가 현저히 저하되는 현상을 말합니다.
- 프로세스가 실재 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저하되는 문제
필요성 및 사용 시기:
- 스레싱을 이해하고 관리하는 것은 시스템의 효율적인 메모리 관리와 성능 유지에 필수적입니다. 스레싱 현상이 발생하면, 시스템의 전반적인 성능이 급격히 저하되기 때문입니다.
작동 방식과 문제점:
- 스레싱은 프로세스가 필요로 하는 페이지가 빈번하게 메모리와 디스크 사이를 오가며 교체될 때 발생합니다. 이로 인해 CPU 사용률이 감소하고, 시스템의 응답 시간이 증가합니다.
해결 방법:
- 멀티 프로그래밍 수준 조절: 시스템에서 동시에 실행되는 프로세스의 수를 조절하여 메모리 요구량과 메모리 공급 사이의 균형을 맞춥니다.
- 페이지 교체 알고리즘 개선: LRU(Least Recently Used)나 LFU(Least Frequently Used)와 같은 효율적인 페이지 교체 알고리즘을 사용합니다.
- 작업 집합 모델 사용: 프로세스가 활성화되는 동안 접근하는 페이지 집합을 관리하여 메모리 할당을 최적화합니다.
프레임 할당방식
프레임 할당:
- 프레임 할당은 가상 메모리에서 페이지나 세그먼트를 물리 메모리의 프레임에 매핑하는 과정입니다. 이 과정은 시스템의 메모리 사용 효율성과 성능에 직접적인 영향을 미칩니다.
개요
- 프레임 할당 방법은 컴퓨터 시스템에서 멀티프로그래밍 환경을 효율적으로 관리하고자 할 때 중요한 역할을 합니다.
- 이는 프로그램이나 프로세스가 메모리에 적재될 때, 그들에게 할당되는 메모리의 '프레임'의 수를 결정하는 방법에 관한 것입니다.
- 프레임은 물리 메모리를 일정 크기의 블록으로 분할한 것으로, 각 프로세스는 여러 프레임을 할당받아 사용합니다.
정의 및 개념
- 프레임 할당은 실행 중인 프로세스에게 메모리 프레임을 어떻게 분배할지 결정하는 전략입니다.
- 이는 고정 할당과 가변 할당으로 크게 나뉩니다.
- 고정 할당에서는 각 프로세스에 고정된 수의 프레임을 할당하며,
- 가변 할당에서는 프로세스의 요구와 시스템의 상태에 따라 프레임 수가 변동됩니다.
필요성
- 메모리 사용의 효율성: 메모리를 효율적으로 사용하여 시스템의 전체 성능을 향상시킵니다.
- 공정한 자원 분배: 여러 프로세스 사이에서 메모리 자원을 공정하게 분배합니다.
- 메모리 보호: 프로세스 간의 메모리 충돌을 방지합니다.
언제 사용하는지 멀티프로그래밍 환경에서 여러 프로세스가 동시에 실행될 때 사용됩니다.
어떻게 사용하는지 및 작동 방식
- 고정 할당: 시스템이 시작될 때 각 프로세스에게 고정된 수의 프레임을 할당합니다.
- 가변 할당: 프로세스의 실행 도중 프로세스의 요구나 시스템 상태에 따라 할당된 프레임의 수를 조정합니다.
문제점 및 해결 방법
- 메모리 단편화: 메모리가 작은 블록으로 나뉘어져 효율적 사용이 어려울 수 있습니다. 이를 해결하기 위해 가변 할당에서는 프로세스의 메모리 요구에 따라 동적으로 프레임을 재할당합니다.
- 프로세스 대기 시간 증가: 특정 프로세스에 충분한 메모리가 할당되지 않아 실행 대기 시간이 길어질 수 있습니다. 이는 우선순위 할당이나, 작업 크기에 따른 할당 조정을 통해 해결할 수 있습니다.
사용 예시
- 고정 할당: 각 사용자에게 정해진 수의 메모리 프레임을 할당하는 시스템.
- 가변 할당: 웹 서버와 같이 요청의 크기와 수가 불규칙한 환경에서 프로세스의 메모리 요구에 따라 동적으로 메모리를 할당하는 시스템.
프레임 할당 방법은 시스템의 성능과 효율성을 극대화하기 위해 중요한 역할을 합니다. 각 방법은 특정 환경과 요구사항에 따라 적절히 선택되어 사용됩니다.
정적 할당 방식
정적 할당 방식은 프로세스와 물리메모리 크기만을 고려한 방식임
정의 및 개념:
- 균등 할당은 시스템에 존재하는 모든 프로세스에 동일한 수의 프레임을 할당하는 방법입니다.
- 이는 가장 단순한 형태의 메모리 할당 방법 중 하나로, 모든 프로세스가 동등한 메모리 자원을 받는다는 원칙에 기반합니다.
필요성:
- 메모리 자원이 한정되어 있을 때, 이를 공정하게 분배하고자 할 때 균등 할당이 유용합니다.
언제 사용하는지:
- 시스템에서 실행되는 프로세스들이 유사한 메모리 요구사항을 가질 때 주로 사용됩니다.
작동 방식:
- 시스템이 부팅되면, 운영체제는 사용 가능한 프레임의 총 수를 결정하고, 이를 시스템 내의 프로세스 수로 나누어 각 프로세스에 할당합니다.
문제점 및 해결 방안:
- 일부 프로세스는 너무 많은 메모리를 받게 되고, 다른 일부는 충분하지 않을 수 있습니다.
- 이러한 불균형을 해결하기 위해 동적 메모리 할당 방법이나 우선순위 기반의 프레임 재할당 같은 보조 메커니즘을 사용할 수 있습니다.
비례 할당(Proportional Allocation)
정의 및 개념:
- 비례 할당은 각 프로세스의 메모리 요구사항이나 중요도에 비례하여 메모리 프레임을 할당하는 방식입니다.
- 프로세스의 크기나 중요도가 큰 프로세스에 더 많은 메모리를 할당합니다.
필요성:
- 다양한 크기와 중요도를 가진 프로세스가 시스템에서 실행될 때, 각 프로세스의 요구사항과 중요도를 반영하여 메모리를 효율적으로 할당하고자 할 때 필요합니다.
언제 사용하는지:
- 프로세스마다 다양한 메모리 요구사항이 있을 때 사용됩니다. 또한 특정 중요 프로세스에 더 많은 메모리 자원을 우선적으로 할당해야 할 때 유용합니다.
작동 방식:
- 시스템은 프로세스의 크기나 중요도를 평가하여 그 비율에 따라 메모리 프레임을 할당합니다. 크기가 크거나 중요도가 높은 프로세스는 더 많은 프레임을 받게 됩니다.
문제점 및 해결 방안:
- 비례 할당은 프로세스의 중요도나 크기를 정확히 평가하기 어렵다는 문제가 있습니다.
- 이를 해결하기 위해 시스템은 정기적으로 프로세스의 메모리 사용 패턴을 모니터링하고, 할당을 조정할 수 있어야 합니다.
사용 예시
- 균등 할당: 단순 배치 시스템이나 유사한 크기와 중요도를 가진 프로세스들이 실행되는 환경에서 사용됩니다.
- 비례 할당: 웹 서버와 같이 다양한 크기의 요청을 처리해야 하는 시스템이나, 특정 중요 작업(예: 데이터베이스 서버)에 더 많은 메모리 자원이 필요한 환경에서 사용됩니다.
각 할당 방법은 특정 환경과 요구사항에 맞춰 선택되며, 효율적인 메모리 관리를 위해 중요한 역할을 합니다.
동적 할당 방식
정의 및 개념
- 동적할당방식은 프로세스의 실행 도중 메모리 요구 사항이 변화할 때, 이에 맞춰 메모리 할당량을 증가시키거나 감소시키는 방식입니다.
- 이는 메모리 사용의 효율성을 극대화하고, 시스템의 전반적인 성능을 향상시키기 위해 도입되었습니다.
필요성
- 유연성: 프로세스의 메모리 요구 사항은 실행 도중 변할 수 있으며, 동적 할당 방식은 이러한 변화에 대응할 수 있습니다.
- 효율성: 사용하지 않는 메모리 공간을 최소화하고, 메모리 자원을 보다 효율적으로 사용할 수 있습니다.
- 멀티태스킹 향상: 다수의 프로세스가 동시에 실행될 때, 각 프로세스에 적절한 메모리를 동적으로 할당함으로써 멀티태스킹 성능을 향상시킬 수 있습니다.
언제 사용하는지
- 동적할당방식은 시스템이 여러 프로세스를 동시에 처리해야 하거나, 프로세스의 메모리 사용 패턴이 불규칙적일 때 유용합니다.
- 예를 들어, 웹 서버, 데이터베이스 시스템, 과학적 계산을 수행하는 시스템 등에서 사용됩니다.
어떻게 사용하는지 및 작동 방식
- 페이지 교체 알고리즘: 가장 적게 사용되는 페이지부터 메모리에서 제거하거나, 최근에 사용되지 않은 페이지를 교체하는 방식 등이 사용됩니다.
- 스와핑: 메모리가 부족할 때, 일부 프로세스를 메모리에서 스왑 영역으로 이동시켜 메모리를 확보합니다.
- 가변 분할 할당: 메모리를 프로세스의 크기에 맞게 가변적으로 분할하여 할당합니다.
문제점 및 해결 방법
- 메모리 단편화: 작은 메모리 조각들이 사용되지 않고 남아 있어, 메모리 사용 효율이 떨어지는 현상입니다. 이를 해결하기 위해 주기적인 메모리 압축(Defragmentation) 작업을 수행할 수 있습니다.
- 스와핑 오버헤드: 너무 자주 스와핑이 발생하면 시스템의 성능이 저하됩니다. 스와핑 정책을 최적화하거나, 메모리를 효율적으로 관리하여 이 문제를 완화할 수 있습니다.
사용 예시
- 웹 서버에서는 다양한 크기의 요청을 처리해야 합니다. 각 요청은 서로 다른 양의 메모리를 필요로 하며, 동적할당방식을 사용함으로써 각 요청에 필요한 정확한 양의 메모리를 할당하고, 요청 처리 후에는 그 메모리를 회수하여 다른 요청에 사용할 수 있습니다. 이는 메모리 사용의 효율성을 극대화하고, 시스템의 전반적인 처리 능력을 향상시킵니다.
작업 집합 모델(Working Set Model)
배경 및 정의:
- 작업 집합 모델은 프로세스가 현재 활발하게 사용하고 있는 일련의 페이지들을 정의합니다.
- 최근 일정 시간 동안 참조된 페이지들을 집합으로 만들고, 이 집합에 있는 페이지들을 물리 메모리에 유지하여 프로세스의 실행을 도움
- CPU가 메모리를 참조할 때에는 참조 지역성의 원리에 의거해 주로 비슷한 구역을 집중적으로 참조함
필요성:
- 모든 프로세스가 동시에 활성화되어 메모리를 요구하는 것이 아니라, 특정 시점에 특정 페이지들만 자주 접근한다는 관찰에 기반합니다.
- 이를 통해 시스템은 더 적은 메모리로 더 많은 프로세스를 효율적으로 관리할 수 있습니다.
사용 시기 및 방법:
- 프로세스의 메모리 할당량을 결정할 때 사용됩니다. 시스템은 일정 시간 동안 프로세스에 의해 접근된 페이지들의 집합(작업 집합)을 모니터링하여, 이를 기반으로 메모리 할당량을 조정합니다.
작동 방식:
- 타임 윈도우(예: 최근 몇 밀리초)동안 프로세스가 접근한 페이지들을 추적합니다. 이 집합의 크기가 프로세스에 할당된 프레임 수를 결정합니다.
문제점 및 해결 방안:
- 작업 집합의 크기 결정이 어렵고, 시스템의 오버헤드가 증가할 수 있습니다. 이를 해결하기 위해, 적절한 타임 윈도우 크기 설정과 효율적인 모니터링 알고리즘의 개발이 필요합니다.
페이지 폴트 빈도(Page Fault Frequency)

배경 및 정의:
- 페이지 폴트 빈도는 프로세스가 시간 단위당 발생시키는 페이지 폴트의 수를 의미합니다. 이 개념은 메모리 할당량을 동적으로 조정하기 위해 사용됩니다.
필요성:
- 프로세스의 메모리 사용량이 변할 수 있으므로, 페이지 폴트 빈도를 통해 이러한 변화를 감지하고, 프로세스에 적절한 메모리 할당량을 동적으로 조정할 필요가 있습니다.
- 작업집합 모델은 프로세스의 성능을 높이는 방법이지만 스레싱 문제를 해결하지는 못함
- 프로세스가 필요로 하는 페이지 양을 동적으로 결정하는 방법
사용 시기 및 방법:
- 프로세스가 너무 많은 페이지 폴트를 발생시키면, 시스템은 해당 프로세스에 더 많은 메모리를 할당합니다.
- 반대로, 페이지 폴트가 너무 적으면, 메모리 할당량을 줄일 수 있습니다.
작동 방식:
- 시스템은 페이지 폴트 빈도를 지속적으로 모니터링하고, 설정된 상한선과 하한선을 기준으로 프로세스의 메모리 할당량을 조정합니다.
문제점 및 해결 방안:
- 적절한 상한선과 하한선을 설정하는 것이 어렵습니다. 이를 위해, 시스템의 전반적인 성능을 모니터링하고, 이에 기반하여 상한선과 하한선을 동적으로 조정할 필요가 있습니다.
사용 예시
- 작업 집합 모델: 고성능 컴퓨팅 환경에서, 다양한 과학 계산 작업을 실행하는 경우, 각 작업의 메모리 접근 패턴이 다를 수 있습니다. 작업 집합 모델을 사용하여, 각 작업에 필요한 메모리를 효율적으로 할당할 수 있습니다.
페이지 폴트 빈도: 웹 서버와 같이 다양한 크기의 요청을 처리하는 시스템에서, 각 요청의 처리 과정에서 발생하는 페이지 폴트 빈도를 기반으로 메모리 할당량을 동적으로 조정할 수 있습니다.
OOM Killer
배경지식 및 개념
- 컴퓨터 시스템에서 메모리는 한정된 자원입니다.
- 프로세스 실행 시 필요한 메모리가 시스템에 충분하지 않을 경우, 시스템 성능 저하 또는 시스템 자체의 정지와 같은 심각한 문제가 발생할 수 있습니다.
- OOM Killer는 이러한 상황을 방지하기 위해 도입된 시스템의 자체 보호 메커니즘입니다.
왜 필요한가?
- 시스템에 사용 가능한 메모리가 부족해지면, 중요한 프로세스까지 영향을 받아 시스템 전체가 불안정해질 수 있습니다.
- OOM Killer는 메모리 부족 상황에서 시스템을 안정적으로 유지하고, 잠재적인 시스템 다운을 예방하기 위해 필요합니다.
어디에 필요한가?
- 서버 운영: 고도의 안정성이 요구되는 서버 환경에서 메모리 관리는 매우 중요합니다.
- 멀티 태스킹 환경: 동시에 여러 프로그램이 실행되는 환경에서 각 프로그램의 메모리 사용량을 감시해야 합니다.
- 고성능 컴퓨팅: 대규모 데이터를 처리하는 과학적 계산이나 데이터 분석에서 메모리 관리는 필수적입니다.
작동원리
- OOM Killer는 시스템의 메모리 상태를 지속적으로 모니터링합니다.
- 메모리가 부족하게 되면, OOM Killer는 각 프로세스의 중요도, 메모리 사용량, 실행 시간 등을 고려하여 종료할 프로세스를 결정합니다. 이렇게 선택된 프로세스는 강제 종료되어 시스템의 메모리를 해방시킵니다.
장단점
장점
- 시스템의 안정성 유지, 잠재적인 시스템 다운 방지
단점
- 중요 프로세스가 예기치 않게 종료될 위험, 프로세스 종료 기준의 불투명성
사용 예시
- 서버 운영 중 메모리 누수로 인해 메모리 사용량이 지속적으로 증가하는 상황
- 대규모 데이터 분석 작업 중 메모리 부족 현상 발생
- 고성능 컴퓨팅 환경에서 여러 계산 작업이 동시에 진행되며 메모리 부족 위험에 처한 경우
OOM Killer는 리눅스 시스템의 안정성을 유지하는 중요한 기능입니다. 하지만, 중요한 프로세스가 강제 종료될 위험이 있기 때문에, 메모리 사용을 세심하게 관리하고, 필요시 적절한 시스템 구성과 자원 할당 전략을 수립하는 것이 중요합니다.
정리하면
OOM Killer는 시스템의 메모리가 부족할 때 커널이 자동으로 프로세스를 종료하는 메커니즘입니다.
커널은 메모리 사용량을 지속적으로 모니터링하다가 사용 가능한 메모리가 일정 임계값 이하로 떨어지면 OOM Killer를 호출합니다.
OOM Killer는 메모리를 가장 많이 사용하는 프로세스나 중요도가 낮은 프로세스를 선택하여 종료하고, 해당 프로세스가 사용하던 메모리를 시스템으로 반환합니다.
이 과정을 통해 시스템의 안정성을 유지하고 메모리 부족 상황을 해결할 수 있습니다.
궁금증
OOM Killer는 가상메모리, 물리메모리중 어디서 발생할까?
답
OOM Killer는 주로 시스템의 물리 메모리가 고갈될 때 활성화되지만, 가상 메모리 환경에서도 관련이 있음.
리눅스와 같은 운영 체제에서는 물리 메모리와 함께 가상 메모리를 사용하여 프로세스에 더 많은 메모리 공간을 제공
가상 메모리는 하드 디스크의 일부를 마치 메모리처럼 사용하는 기술임!
물리 메모리가 모두 사용되고 시스템이 가상 메모리까지 사용하는 상황에서도 메모리 요청이 계속 증가하면, 결국 가용 메모리가 부족해질 수 있음
이러한 상황에서 시스템의 안정성을 유지하기 위해 OOM Killer가 작동할 수 있음
즉, OOM Killer가 작동하는 것은 주로 물리 메모리가 고갈됐을 때이지만, 가상 메모리를 포함한 전체 메모리 관리 시스템의 일부로 볼 수 있음
물리 메모리와 가상 메모리 모두 고려 대상이 되지만, 궁극적으로는 시스템 전체의 메모리 자원이 부족할 때 OOM Killer가 활성화가됨
참고
그림들