Linux 메모리가 계속 증가할 때 확인하는 방법 (Memory Leak 원인 찾고 해결하기)

Linux 서버를 운영하다 보면 CPU 사용률은 높지 않은데 메모리 사용량이 계속 증가하는 경우가 있습니다. 처음에는 정상적으로 동작하지만 시간이 지날수록 메모리가 줄어들고 결국 Swap을 사용하거나 Out of Memory(OOM) 오류가 발생하여 서비스가 중단될 수도 있습니다.

이러한 문제는 애플리케이션의 Memory Leak(메모리 누수), 비정상적인 캐시 증가, 잘못된 프로그램 동작 등 다양한 원인으로 발생합니다. 단순히 서버를 재부팅하면 일시적으로 해결될 수 있지만 근본적인 원인은 그대로 남아 있기 때문에 정확한 원인 분석이 중요합니다.

이번 글에서는 Linux에서 메모리 사용량이 계속 증가할 때 원인을 찾는 방법과 해결 절차를 자세히 알아보겠습니다.

메모리 사용량이 증가하는 대표적인 원인

메모리 증가의 원인은 다양합니다.

대표적인 원인은 다음과 같습니다.

  • Memory Leak
  • Java Heap 증가
  • 웹 서버 프로세스 증가
  • 데이터베이스 캐시 증가
  • Buffer Cache 증가
  • Page Cache 증가
  • Swap 사용 증가
  • 비정상적인 프로세스 실행

메모리 사용량이 높다고 해서 모두 장애는 아닙니다.

Linux는 남는 메모리를 캐시로 적극 활용하기 때문입니다.

1단계. 현재 메모리 상태 확인하기

먼저 전체 메모리를 확인합니다.

free -h

다음 항목을 확인합니다.

  • Total
  • Used
  • Free
  • Buff/Cache
  • Available
  • Swap

특히 Available 메모리를 가장 중요하게 확인해야 합니다.

2단계. 실시간 메모리 확인하기

실시간으로 메모리 변화를 확인합니다.

top

또는

htop

메모리 사용량이 계속 증가하는지 확인합니다.

3단계. 메모리를 가장 많이 사용하는 프로세스 찾기

메모리 사용량 기준으로 정렬합니다.

ps aux --sort=-%mem | head

메모리를 가장 많이 사용하는 프로세스를 확인할 수 있습니다.

4단계. 프로세스 상세 확인하기

문제가 되는 프로세스를 확인합니다.

ps -fp PID

어떤 프로그램인지 먼저 확인하는 것이 중요합니다.

5단계. 메모리 통계 확인하기

메모리 상태를 자세히 확인합니다.

vmstat 1

다음 항목을 확인합니다.

  • free
  • buff
  • cache
  • si
  • so

Swap In(si)과 Swap Out(so)이 계속 증가하면 메모리 부족을 의심할 수 있습니다.

6단계. 프로세스별 메모리 사용량 확인하기

더 자세한 메모리 정보를 확인하려면 다음 명령어를 실행합니다.

pmap PID

프로세스가 어떤 메모리를 사용하는지 확인할 수 있습니다.

7단계. Swap 사용량 확인하기

Swap 사용량도 함께 확인합니다.

swapon --show

또는

cat /proc/swaps

Swap 사용량이 계속 증가하면 메모리 부족 현상이 발생하고 있을 가능성이 큽니다.

8단계. OOM 발생 여부 확인하기

메모리가 부족하면 OOM Killer가 실행될 수 있습니다.

다음 명령어를 실행합니다.

dmesg | grep -i oom

또는

journalctl -k | grep -i oom

OOM 로그가 있다면 어떤 프로세스가 종료되었는지 확인할 수 있습니다.

9단계. 캐시와 실제 메모리 구분하기

Linux는 남는 메모리를 캐시로 사용합니다.

Buffer Cache와 Page Cache가 크더라도 Available 메모리가 충분하다면 정상적인 동작일 수 있습니다.

캐시 때문에 메모리가 부족하다고 판단해서는 안 됩니다.

10단계. Memory Leak 의심하기

다음과 같은 경우에는 Memory Leak을 의심해야 합니다.

  • 메모리가 계속 증가한다.
  • Available 메모리가 계속 감소한다.
  • 프로세스를 종료하면 메모리가 바로 회복된다.
  • 시간이 지날수록 Swap 사용량도 증가한다.

애플리케이션 로그와 버전도 함께 확인하는 것이 좋습니다.

메모리 문제 점검 순서

실무에서는 일반적으로 다음 순서대로 확인합니다.

  1. free -h
  2. top
  3. ps aux –sort=-%mem
  4. vmstat
  5. pmap
  6. swapon
  7. dmesg
  8. journalctl
  9. Available 메모리 확인
  10. Memory Leak 분석

이 순서대로 확인하면 대부분의 메모리 문제를 빠르게 진단할 수 있습니다.

메모리 점검 시 주의할 점

Linux는 캐시를 적극적으로 사용하는 운영체제입니다.

Used 메모리만 보고 메모리 부족이라고 판단해서는 안 됩니다.

반드시 Available 메모리, Swap 사용량, OOM 발생 여부를 함께 확인해야 정확한 원인을 찾을 수 있습니다.

자주 묻는 질문

메모리 사용률이 90%를 넘으면 반드시 문제가 있는 건가요?

아닙니다.

Linux는 남는 메모리를 캐시로 사용하기 때문에 Available 메모리가 충분하다면 정상일 수 있습니다.

Memory Leak은 어떻게 확인하나요?

특정 프로세스의 메모리 사용량이 시간이 지나도 계속 증가하는지 확인하는 것이 가장 중요합니다.

OOM이 발생했는지는 어떻게 확인하나요?

다음 명령어를 사용합니다.

dmesg | grep -i oom

마무리

Linux에서 메모리 사용량이 계속 증가한다면 단순히 Used 메모리만 볼 것이 아니라 Available 메모리, Swap 사용량, OOM 로그, 프로세스별 메모리 사용량을 함께 분석해야 합니다. free, top, vmstat, pmap, dmesg, journalctl 명령어를 순서대로 활용하면 Memory Leak과 메모리 부족 문제를 보다 정확하게 진단하고 안정적으로 서버를 운영할 수 있습니다.

댓글 남기기