Rain WikiWindows · Linux · Android

OOM 킬러

개념모든 Linux 배포판

OOM(out-of-memory) 킬러는 시스템 메모리가 고갈되어 더 이상 확보할 수 없을 때 프로세스를 종료하는 Linux 커널의 구성 요소입니다. OOM 점수를 기준으로 프로세스를 선택하며, 대개 메모리를 가장 많이 사용하는 프로세스가 선택됩니다. 커널 로그에는 모든 OOM 킬 기록이 남습니다.

1희생양 프로세스가 선택되는 방식

각 프로세스에는 메모리 사용량에 따라 증가하는 /proc/<pid>/oom_score 점수가 있습니다. -1000에서 1000 사이의 값을 갖는 /proc/<pid>/oom_score_adj를 통해 이 점수를 조정할 수 있으며, -1000은 해당 프로세스가 절대 선택되지 않음을 의미합니다.

2OOM 킬 확인

커널 로그에 'Out of memory: Killed process'가 기록됩니다. journalctl -k | grep -i oom 또는 dmesg | grep -i oom 명령을 통해 프로세스 이름과 메모리 사용량이 포함된 이러한 메시지를 확인할 수 있습니다.

3예방

메모리나 스왑을 추가하고, 메모리를 많이 사용하는 서비스를 제한하거나, MemoryMax= 같은 systemd 옵션을 사용하여 서비스별로 제한을 설정합니다. 일부 배포판에서는 메모리 압박에 따라 더 일찍 작동하는 systemd-oomd를 실행하기도 합니다.

OOM 킬 조사 방법

  1. 커널 로그 검색: journalctl -k | grep -i -A5 'out of memory'
  2. 종료된 프로세스와 해당 메모리 크기 기록.
  3. 현재 메모리 및 스왑 확인: free -h
  4. 가장 큰 프로세스 찾기: ps aux --sort=-rss | head
  5. 스왑을 추가하거나 서비스를 제한한 후 재발 여부 모니터링.

주의 사항

  • 많은 프로세스에 oom_score_adj를 -1000으로 설정하면 커널에 안전한 선택지가 없어질 수 있습니다.
  • 메모리 오버커밋 보호 기능을 정확히 이해하지 못한 채 끄면 다른 곳에서 오류가 발생할 수 있습니다.

출처

  1. proc(5) 매뉴얼 페이지: oom_score 및 oom_score_adj man7.org
  2. Out Of Memory Management (kernel.org) kernel.org

참고: RainServer는 Linux 서버를 위한 모니터링 및 안전한 정리를 제공하며, 변경될 내용을 먼저 보여주고 사용자에게 확인을 요청합니다.

최종 검토: