본문 바로가기
개발

서버 기동 시 Out of Memory(OOM) 오류 원인과 해결 방법

by garlicssam 2025. 3. 12.

서버를 기동할 때 Out of Memory (OOM) 오류가 발생하면 시스템이 할당된 메모리를 초과하여 사용하고 있다는 의미입니다. 이는 웹 애플리케이션, 데이터베이스, 컨테이너 환경 등 다양한 상황에서 발생할 수 있으며, 원인과 해결 방법을 정확히 파악하는 것이 중요합니다.

 

1. OOM 오류의 주요 원인

1.1 서버의 물리적 메모리 부족

  • 서버의 실제 RAM이 애플리케이션 실행에 필요한 메모리보다 부족할 경우 발생합니다.
  • 다수의 프로세스가 동시에 실행되면서 전체 메모리가 소진될 수 있습니다.

1.2 애플리케이션의 과도한 메모리 사용

  • Java 애플리케이션의 경우 JVM의 -Xmx 설정이 너무 커서 전체 메모리를 초과할 수 있습니다.
  • 데이터베이스(MySQL, PostgreSQL 등)가 과도한 캐시를 사용하여 메모리 부족 현상이 발생할 수 있습니다.
  • 컨테이너 환경(Docker, Kubernetes)에서 메모리 리밋을 초과하면 OOM이 발생합니다.

1.3 리소스 제한 설정 문제

  • Linux OOM Killer가 메모리 사용량이 높은 프로세스를 강제 종료할 수 있습니다.
  • ulimit 또는 cgroups 설정이 메모리 사용을 제한하고 있을 가능성이 있습니다.

1.4 메모리 누수 (Memory Leak)

  • 애플리케이션에서 객체를 적절히 해제하지 않아 메모리가 지속적으로 증가하는 경우 OOM이 발생할 수 있습니다.

1.5 스왑(Swap) 공간 부족

  • 스왑 공간이 부족하거나 비활성화된 경우, 물리적 RAM이 부족할 때 이를 보완할 방법이 없어 OOM이 발생할 수 있습니다.

2. OOM 오류 해결 방법

2.1 메모리 사용량 확인

먼저 현재 메모리 사용량을 확인하여 어느 프로세스가 많은 메모리를 사용하는지 점검해야 합니다.

free -m   # 시스템 전체 메모리 사용량 확인
top       # 프로세스별 메모리 사용량 모니터링
ps aux --sort=-%mem | head -10  # 가장 많은 메모리를 차지하는 프로세스 확인

2.2 OOM Killer 로그 확인

Linux에서는 OOM Killer가 메모리를 과도하게 사용하는 프로세스를 종료하는 경우가 많습니다. 로그를 확인하여 어떤 프로세스가 종료되었는지 살펴봅니다.

dmesg | grep -i 'out of memory'
journalctl -k | grep -i 'oom'

2.3 애플리케이션의 메모리 설정 조정

  • JVM 애플리케이션: -Xmx 값을 서버의 가용 메모리 내에서 적절하게 조정해야 합니다.
  • JAVA_OPTS="-Xms512m -Xmx2g"
  • MySQL: innodb_buffer_pool_size 값을 조정하여 과도한 캐시 사용을 방지합니다.
  • SET GLOBAL innodb_buffer_pool_size = 2G;
  • 컨테이너(Kubernetes, Docker): memory limit 값을 올려 OOM을 방지할 수 있습니다.
  • resources: requests: memory: "512Mi" limits: memory: "2Gi"

2.4 불필요한 프로세스 종료

kill -9 <PID>   # 특정 프로세스 종료

2.5 스왑 공간 추가

스왑 공간을 추가하여 RAM이 부족할 때 보조 저장 공간을 활용할 수 있습니다.

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

3. 실제 사례로 보는 OOM 오류 해결법

3.1 웹 애플리케이션 서버에서 OOM 발생 (Tomcat, Node.js)

  • 문제: 트래픽 증가로 인해 Tomcat의 메모리 사용량이 90%를 초과하며 OOM 발생.
  • 해결: JVM 힙 메모리 조정(-Xmx2g), Nginx Keep-Alive 최적화, GC 튜닝.

3.2 데이터베이스(MySQL, PostgreSQL)에서 OOM 발생

  • 문제: InnoDB 캐시 크기가 너무 커서 OOM 발생.
  • 해결: innodb_buffer_pool_sizemax_connections 조정, 불필요한 쿼리 최적화.

3.3 컨테이너 환경(Kubernetes, Docker)에서 OOM 발생

  • 문제: kubectl describe pod 결과 OOMKilled 메시지 확인됨.
  • 해결: resources.limits.memory 증가 및 JVM -XX:MaxRAMPercentage 설정.

3.4 대량 로그 적재 시 OOM 발생 (Elasticsearch)

  • 문제: 로그 분석 중 메모리 부족으로 OOM 발생.
  • 해결: Elasticsearch 힙 메모리 조정(-Xms4g -Xmx4g), 오래된 로그 자동 삭제.

3.5 배치 작업 실행 중 OOM 발생 (Spark, Python Pandas)

  • 문제: 대량 CSV 데이터 로드 중 java.lang.OutOfMemoryError 발생.
  • 해결: Spark 실행 메모리 조정(--executor-memory 4g), repartition() 사용.

4. 결론

서버 기동 시 OOM 오류를 방지하려면 메모리 사용량을 정기적으로 모니터링하고, 애플리케이션별로 적절한 메모리 제한을 설정해야 합니다. 주요 해결책을 요약하면 다음과 같습니다.

메모리 사용량 점검 (free -m, top, ps aux)OOM Killer 로그 확인 (dmesg, journalctl)적절한 메모리 설정 (Xmx, DB 설정, 컨테이너 리소스 제한)GC 튜닝 및 불필요한 캐싱 최소화스왑 공간 추가 및 불필요한 프로세스 종료

 

 

 

VPN 서버에 대한 간단한 설명

VPN 서버는 원격 클라이언트가 인터넷 또는 내부 네트워크에 액세스 할 수 있도록 보안 연결을 제공하는 컴퓨터 또는 컴퓨터 네트워크다. VPN은 Virtual Private Network의 약자로, 클라이언트가 인터넷

aboutevery.tistory.com

 

 

프레임 바디 SUV 모하비의 단종 의의와 전망

기아자동차의 모하비는 대형 SUV 시장에서 독특한 위치를 차지했던 모델로, 2008년 출시부터 2025년 단종까지 17년간의 역사를 가지고 있습니다. 이 차량의 개발 과정, 시장 평가, 판매 실적, 그리고

aboutevery.tistory.com

 

 

BYD: 중국 전기차 시장의 선두주자의 한국진출

BYD(Build Your Dreams)는 중국의 대표적인 전기차 제조업체로, 글로벌 자동차 시장에서 빠르게 성장하고 있는 기업입니다. 1995년 설립된 BYD는 초기에 배터리 제조업체로 시작하여 현재는 전기차, 하

aboutevery.tistory.com

 

댓글