우분투 실전 명령어 | free, vmstat로 메모리 압박 진단
언제 쓰는가
서버가 느려졌는데 CPU 사용률은 높지 않을 때, 메모리 압박부터 확인하면 원인을 빨리 좁힐 수 있다. 특히 스왑이 계속 늘거나 iowait가 같이 튀는 상황이면 응답 지연이 길어지기 쉽다. free와 vmstat을 같이 보면 현재 상태와 추세를 함께 확인할 수 있어서 장애 초동 대응에 유용하다.
바로 쓰는 명령어 (코드블록)
# 1) 현재 메모리/스왑 상태 확인
free -h
# 2) 1초 간격으로 10회 샘플링(런큐, 스왑, IO wait 같이 확인)
vmstat 1 10
# 사용 가능한 메모리 위주로 간단 확인
free -m | awk 'NR==2{printf "used=%sMB, free=%sMB, buff/cache=%sMB, available=%sMB\n", $3,$4,$6,$7}'
# 스왑 사용 중인 프로세스 상위 확인(권한 필요)
for p in /proc/[0-9]*; do
pid=${p##*/}
swap_kb=$(awk '/VmSwap/{print $2}' "$p/status" 2>/dev/null)
if [ -n "$swap_kb" ] && [ "$swap_kb" -gt 0 ]; then
cmd=$(tr -d '\0' < "$p/cmdline" 2>/dev/null | cut -c1-80)
printf "%10s KB pid=%-7s %s\n" "$swap_kb" "$pid" "$cmd"
fi
done | sort -nr | head -20
핵심 옵션/패턴
- free -h: 사람이 읽기 쉬운 단위로 메모리와 스왑을 바로 확인
- free -m: MB 기준 수치 비교가 필요할 때 유용
- vmstat 1 10: 1초 간격으로 10번 측정해서 순간값이 아니라 추세 확인
- vmstat에서 볼 항목
- r: 실행 대기 프로세스 수
- si/so: 스왑 in/out, 0이 아닌 값이 계속 나오면 메모리 압박 신호
- wa: I/O 대기 비율, 높게 유지되면 디스크 병목 가능성
명령 출력 예시
$ free -h
total used free shared buff/cache available
Mem: 31Gi 18Gi 1.2Gi 512Mi 12Gi 11Gi
Swap: 2.0Gi 1.1Gi 896Mi
$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 1126400 124000 92160 12500480 0 0 5 12 210 430 12 4 80 4 0
4 1 1130240 118200 92160 12490000 32 96 140 220 510 1090 18 6 58 18 0
자주 하는 실수
- free의 free 컬럼만 보고 메모리 부족이라고 단정하는 경우. available 컬럼을 같이 봐야 실제 여유를 판단할 수 있다.
- vmstat을 1회만 보고 결론 내리는 경우. 최소 5~10회는 관찰해서 지속적인 스왑이나 대기 패턴을 확인해야 한다.
- si/so가 잠깐 튄 한 줄만 보고 바로 재시작하는 경우. 배치 작업 시점인지, 특정 프로세스 급증인지 먼저 확인하는 게 안전하다.
검증 방법 (결과 확인 명령어)
# 10초 관찰 후 스왑 in/out 발생 여부 확인
vmstat 1 10
# 메모리 많이 쓰는 프로세스 확인
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -15
# OOM 킬 로그 확인
journalctl -k --since "-2h" | grep -Ei "out of memory|oom-killer|killed process"
운영 팁 (선택)
메모리 압박이 의심될 때는 먼저 원인 프로세스를 식별하고, 재시작 전에 트래픽 피크 시간대와 배치 스케줄을 같이 확인하는 편이 좋다. 단기 대응으로 캐시 정리나 스케일 아웃을 검토할 수 있지만, 반복되면 애플리케이션 메모리 제한과 누수 점검을 우선순위로 두는 게 재발 방지에 효과적이다.
출처
- Ubuntu Manpage free
- procps-ng vmstat 문서
- Linux kernel OOM 관련 문서