본문 바로가기
IT KNOWLEDGE

OOM(Out Of Memory)

by 알 수 없는 사용자 2023. 11. 20.

안녕하세요. 이쁜이와 멋쟁이의 "BTC_준호" 입니다. 
오늘은 OOM(Out Of Memory)에 대해 이야기해보겠습니다.

OOM 킬러


OOM이란?

OOM, 즉 Out Of Memory는 컴퓨터 시스템에서 사용 가능한 메모리가 부족하여 발생하는 문제입니다. 이 상황은 시스템이나 애플리케이션에 할당된 메모리가 고갈되었을 때 발생하며, 이로 인해 시스템 성능 저하, 응답 불가, 심지어 시스템의 완전한 정지까지 이어질 수 있습니다.


OOM의 주요 원인

1. 과도한 자원 요구: 애플리케이션이 필요 이상의 메모리를 요구할 때 주로 발생합니다. 예를 들어, 매우 큰 데이터 세트를 처리하려 할 때 이 문제가 발생할 수 있습니다.
2. 메모리 누수: 프로그램이 사용한 메모리를 적절히 반환하지 않아 발생합니다. 오래 실행되는 서버나 애플리케이션에서 흔히 볼 수 있습니다.
3. 구성 오류: 시스템이나 애플리케이션의 잘못된 구성으로 인해 메모리가 부적절하게 할당될 수 있습니다.

추가적으로, 리눅스 시스템에서 프로세스는 메모리를 사용하기 위해 커널에게 필요한 메모리 영역을 요청합니다. 커널은 이 요청에 응답하여 프로세스에게 가상 메모리 주소를 할당합니다. 이 단계에서는 실제 물리 메모리에 해당 영역이 할당된 상태는 아닙니다.

프로세스가 이 가상 메모리 영역에 실제로 쓰기 작업을 시도할 때, '페이지 폴트(Page Fault)'가 발생하고, 이 시점에서 커널은 가상 메모리 공간을 실제 물리 메모리에 매핑합니다. 이 메커니즘 덕분에 리눅스는 실제 물리 메모리보다 더 많은 양의 가상 메모리를 프로세스들에게 할당할 수 있습니다.

그러나 프로세스가 실제 메모리에 접근하여 쓰기 작업을 수행하게 되면, 물리 메모리가 부족해질 수 있는데, 이것이 메모리 부족 상태의 주요 원인 중 하나입니다. 이렇게 실제 메모리가 부족해지면 시스템의 성능 저하 또는 다른 문제들이 발생할 수 있습니다.


OOM Killer

OOM Killer는 리눅스 시스템에서 메모리 부족 문제를 자동으로 처리하는 메커니즘입니다. 리눅스 운영 체제의 커널에 내장된 기능으로, 메모리 관리 시스템의 일부입니다. 이는 운영 체제의 필수적인 부분으로, 별도의 프로세스로 실행되지 않고 커널 수준에서 작동합니다. 시스템에서 사용 가능한 메모리가 거의 없을 때, OOM Killer는 자동으로 활성화되어 시스템의 안정성을 유지하기 위해 특정 프로세스를 강제 종료합니다.


OOM Killer의 작동 방식

시스템은 각 프로세스에 oom_score라는 점수를 할당합니다. 이 점수는 프로세스가 얼마나 많은 메모리를 사용하고 있는지, 얼마나 중요한지 등을 기반으로 합니다.
메모리 부족 상황이 발생하면, OOM Killer는 가장 높은 oom_score를 가진 프로세스를 선택하여 종료합니다.
이 과정은 시스템이 충분한 메모리를 회복할 때까지 반복됩니다.


OOM 발생 시 해결방안

1. 메모리 확인

free -h, top, htop 등의 명령어를 사용하여 메모리 사용량을 체크합니다.

 

2. 로그 분석

/var/log/messages 또는 /var/log/syslog 같은 시스템 로그 파일을 확인하여 OOM Killer에 의해 종료된 프로세스의 정보를 찾습니다. 로그를 통해 어떤 프로세스가 메모리를 과도하게 사용했는지 파악합니다.

 

3. 메모리 누수 찾기 및 해결
메모리 누수가 의심되는 프로그램을 찾아 메모리 할당 및 해제를 적절히 관리합니다.

 

4. 시스템 재시작

심각한 메모리 부족 문제가 발생했을 경우, 시스템을 재시작하여 모든 리소스를 초기화합니다.

 

4. 하드웨어 업그레이드
시스템의 메모리 용량이 부족한 경우, 물리적 메모리를 추가하여 업그레이드하는 것을 고려합니다.


참조문서

https://blog.bespinglobal.com/post/out_of_memory/

'IT KNOWLEDGE' 카테고리의 다른 글

NLP, NLU, NLG  (0) 2023.11.24
Chart.js로 데이터 시각화 하기  (0) 2023.11.21
Chat GPT 사용 패턴  (0) 2023.11.10
프로젝트 아키텍트  (2) 2023.11.09
[Youtube API] Chat GPT 연동하기  (1) 2023.10.26

댓글