1단계 — 메모리 현황 파악
Bash
# 전체 메모리 현황
free -h
# Mem: total=16G, used=14G, free=500M, buff/cache=2G, available=1G
# available이 중요 — 실제 사용 가능한 메모리
# 상세 정보
cat /proc/meminfo | grep -E "MemTotal|MemFree|MemAvailable|Cached|Buffers|SwapTotal|SwapFree"
# 시간에 따른 메모리 변화 관찰
watch -n 5 'free -h'
# vmstat으로 스왑 활성도 확인
vmstat 5 10
# si/so 컬럼이 지속적으로 0이 아니면 메모리 부족2단계 — 메모리 소비 프로세스 특정
Bash
# 메모리 Top 10
ps aux --sort=-%mem | head -11
ps aux --sort=-rss | awk '{print $2, $4, $6, $11}' | head -11
# 특정 프로세스 메모리
ps -p 1234 -o pid,rss,vsz,cmd
# RSS: 실제 점유 메모리 (KB)
# VSZ: 가상 메모리 크기 (공유 라이브러리 포함)
# pidstat으로 메모리 추이 관찰
pidstat -r -p 1234 5 12 # 5초 간격, 1분3단계 — 프로세스 메모리 맵 분석
Bash
# pmap — 메모리 매핑 요약
sudo pmap -x 1234
# RSS 합계가 실제 사용량
sudo pmap -x 1234 | tail -1
# /proc/PID/smaps — 상세 분석
sudo cat /proc/1234/smaps | awk '
/^Private_Dirty/ { pd += $2 }
/^Shared_Dirty/ { sd += $2 }
END { printf "Private Dirty: %d KB\nShared Dirty: %d KB\n", pd, sd }
'
# smaps_rollup — 요약 (kernel 4.14+)
sudo cat /proc/1234/smaps_rollup
# 힙 크기 확인
sudo cat /proc/1234/status | grep -E "VmRSS|VmHeap|VmPeak"4단계 — 언어별 메모리 누수 추적
C / C++ — Valgrind
Bash
sudo apt install -y valgrind
# 메모리 누수 검사
valgrind --leak-check=full \
--show-leak-kinds=all \
--track-origins=yes \
--verbose \
./myprogram 2>&1 | tee valgrind.log
# 주요 출력
# "definitely lost": 확실한 누수
# "indirectly lost": 간접 누수
# "possibly lost": 누수 가능성C / C++ — AddressSanitizer (빠른 컴파일 타임 검사)
Bash
# 컴파일 시 활성화
gcc -fsanitize=address -g -O1 myprogram.c -o myprogram
./myprogram # 누수 발생 시 자동 보고Python
Python
import tracemalloc
tracemalloc.start()
# 분석할 코드
do_something()
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')
for stat in top_stats[:10]:
print(stat)Node.js
Bash
# heapdump로 스냅샷 비교
node --expose-gc server.js
# Chrome DevTools 연결
node --inspect server.js
# chrome://inspect 에서 메모리 프로파일5단계 — OOM Killer 확인
Bash
# OOM으로 프로세스가 종료됐는지 확인
dmesg | grep -i "oom|killed process|out of memory"
sudo journalctl -k | grep -i oom
# OOM 스코어 확인 (높을수록 먼저 kill)
cat /proc/1234/oom_score
# 중요 프로세스 OOM 보호
echo -1000 | sudo tee /proc/1234/oom_score_adj6단계 — 임시 완화
Bash
# 페이지 캐시 해제
sync; echo 1 | sudo tee /proc/sys/vm/drop_caches
# 슬랩 캐시까지 해제
sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
# 스왑 추가 (임시)
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile편집 안내 · Editorial Note
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
관련 공식 문서GNU/Linux man 페이지 ↗
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.