Linux OOM Killer 이해하기: 재미있는 그림 설명

소개

OOM Killer(Out-of-Memory Killer)는 시스템 메모리가 부족해질 때 개입하는 Linux의 중요한 메커니즘입니다. 프로세스를 종료하여 메모리를 확보하고 시스템을 계속 실행합니다. 메모리가 부족한 상황에서는 구세주이지만, 그 동작은 때로 임의적이거나 혼란스럽게 보일 수 있습니다.

OOM Killer 뒤에 있는 개념을 이해하는 데 도움이 되도록, 비행기, 승객, 연료 부족이 등장하는 재미있는 비유를 소개합니다.


OOM Killer란?

OOM Killer는 시스템 메모리가 부족해지고 리소스를 회수해야 할 때 활성화됩니다. 메모리 사용량, 우선순위, 시스템에서의 중요도와 같은 요소를 기준으로 어떤 프로세스를 종료할지 결정하는 점수 시스템을 사용합니다.


예시: 비행기 비유로 OOM Killer 이해하기

어느 항공사가 연료를 적게 싣고 비행하는 것이 더 저렴하다는 것을 발견했다고 상상해 보세요. 비용은 절약되지만 가끔 비행 중 연료 부족이 발생합니다. 추락을 막기 위해 엔지니어들은 OOF (Out-of-Fuel)라는 메커니즘을 개발했습니다. 이는 승객을 밖으로 내보내 무게를 줄이고 비행 시간을 늘립니다.

비상 상황에서는 승객 한 명이 선택되어 비행기 밖으로 던져집니다. 여기에 딜레마가 있습니다.

  • 누구를 내보내야 할까?무작위여야 할까, 아니면 몸무게가 더 나가는 승객을 우선해야 할까?
  • 승객은 내보내지지 않기 위해 추가 요금을 내야 할까?
  • 조종사가 선택되면 어떻게 될까?

시간이 지나면서 엔지니어들은 시스템을 개선하지만, 그래도 가끔 오작동하여 연료 부족이 없을 때에도 승객을 내보내곤 합니다. 이 유머러스한 비유는 OOM Killer의 과제를 그대로 보여줍니다. OOM Killer도 시스템 메모리가 심각하게 부족하지 않을 때에도 가끔 프로세스를 예기치 않게 종료합니다.


Linux에서 OOM Killer가 동작하는 방식

OOM Killer는 어떤 프로세스를 종료할지 결정하기 위해 점수 시스템을 사용합니다. 고려 요소는 다음과 같습니다.

  • 메모리 사용량: 가장 많은 메모리를 사용하는 프로세스가 대상이 될 가능성이 높습니다.
  • 우선순위: 우선순위가 낮은 프로세스가 종료될 가능성이 더 높습니다.
  • 중요도: 시스템에 중요한 프로세스(커널 등)는 보통 제외됩니다.

OOM Killer가 발동하면 메모리를 확보하고 시스템 안정성을 회복하기 위해 프로세스를 종료합니다.


OOM Killer 관리하기

클라우드 환경이나 온프레미스 인프라에서 Linux를 실행하고 있다면 OOM Killer를 이해하고 관리하는 것이 필수적입니다. 몇 가지 팁은 다음과 같습니다.

1. OOM 점수 조정하기

프로세스의 oom_score_adj 값을 조정하여 OOM Killer의 동작에 영향을 줄 수 있습니다. 점수가 낮을수록 프로세스가 종료될 가능성이 낮아집니다.

예제 명령:

echo -1000 > /proc/<pid>/oom_score_adj

2. 메모리 사용량 모니터링하기

OOM Killer가 개입하기 전에 메모리 사용량을 모니터링하고 리소스를 많이 사용하는 프로세스를 식별하려면 htop, free, 또는 vmstat와(과) 같은 도구를 사용하세요.

3. 스왑 공간 할당하기

스왑 공간을 추가하면 가상 메모리가 추가로 제공되어 OOM 상황이 발생할 가능성을 줄이는 데 도움이 될 수 있습니다.

스왑 파일을 만드는 예제 명령:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

4. 문서와 로그 활용하기

시스템 로그(/var/log/syslog 또는 dmesg)를 확인하여 OOM Killer가 발동한 이유와 영향을 받은 프로세스를 파악하세요.


참고 자료

OOM Killer와 Linux 메모리 관리에 대한 자세한 내용은 다음을 참조하세요.

댓글 남기기