안녕하세요. 비전 IDC 기술팀입니다.
Ubuntu 22.04 서버에서 메모리 사용량이 높아졌을 때는 먼저 시스템 전체 메모리 상태를 확인한 뒤, 실제 물리 메모리를 많이 점유하는 프로세스를 찾아 원인을 좁혀가는 것이 좋습니다.
이번 문서에서는 free, top, ps, pmap, vmstat과 /proc 정보를 이용하여 메모리 사용량이 높은 프로세스를 확인하고, 스왑 사용이나 OOM(Out Of Memory) 발생 여부까지 점검하는 방법을 설명합니다.
적용 환경
- 운영체제: Ubuntu 22.04 LTS (Jammy Jellyfish)
- 기본 도구: procps 패키지의
free,top,ps,vmstat,pmap - 권한: 대부분 일반 사용자로 확인할 수 있으나, 다른 사용자의 일부 프로세스 정보나 커널 로그는
sudo권한이 필요할 수 있습니다.
1. 시스템 전체 메모리 상태 확인
프로세스를 확인하기 전에 실제로 시스템의 가용 메모리가 부족한 상태인지 먼저 확인합니다. 가장 간단한 방법은 free -h입니다.
free -h
출력에서 특히 available과 Swap 영역을 확인합니다. available은 스왑을 사용하지 않고 새 애플리케이션을 시작하는 데 사용할 수 있을 것으로 추정되는 메모리입니다.
| 항목 | 의미 |
|---|---|
used |
현재 사용 중인 메모리입니다. Linux의 캐시 정책 때문에 이 값만 보고 메모리 부족을 판단하지 않는 것이 좋습니다. |
buff/cache |
커널 버퍼와 페이지 캐시 등에 사용되는 메모리입니다. 필요할 때 상당 부분 회수될 수 있습니다. |
available |
새 프로그램이 사용할 수 있을 것으로 추정되는 메모리입니다. 메모리 여유를 판단할 때 중요한 값입니다. |
Swap used |
현재 스왑으로 이동한 메모리 양입니다. 지속적으로 증가하거나 시스템 응답이 느리다면 추가 진단이 필요합니다. |
보다 원본에 가까운 커널 메모리 정보를 확인하려면 /proc/meminfo에서 주요 항목을 조회할 수 있습니다.
grep -E '^(MemTotal|MemAvailable|SwapTotal|SwapFree):' /proc/meminfo
2. 메모리를 많이 사용하는 프로세스 찾기
top에서 메모리 사용량순으로 정렬하기
top은 현재 실행 중인 프로세스와 시스템 상태를 실시간으로 확인할 수 있습니다.
top
top 실행 중 Shift + M을 누르면 메모리 사용량 기준으로 프로세스를 정렬할 수 있습니다. 주요 열은 다음과 같습니다.
- %MEM: 해당 프로세스의 상주 메모리(RES)가 전체 물리 메모리에서 차지하는 비율
- RES: 프로세스가 현재 물리 RAM에 상주시킨 메모리 크기
- VIRT: 프로세스가 사용하는 전체 가상 주소 공간 크기
- COMMAND: 프로세스 또는 실행 명령 이름
ps로 메모리 사용량 상위 프로세스 확인하기
실시간 화면 대신 한 번에 상위 프로세스 목록을 확인하려면 다음 명령을 사용할 수 있습니다.
ps -eo pid,user,comm,%mem,rss,vsz --sort=-rss | head -n 20
이 명령은 RSS가 큰 순서대로 상위 프로세스를 표시합니다. rss와 vsz는 기본적으로 KiB 단위이며, 실제 RAM 점유량을 비교할 때는 rss를 우선 확인하는 것이 유용합니다.
3. 특정 프로세스의 메모리 상세 확인
메모리를 많이 사용하는 PID를 찾았다면 해당 프로세스의 /proc/PID/status 정보를 확인합니다. 아래 예시는 PID가 1234인 경우입니다. 실제 서버에서는 확인한 PID로 변경하십시오.
grep -E '^(Name|VmRSS|VmHWM|VmSize|RssAnon|RssFile|RssShmem|VmSwap):' /proc/1234/status
- VmRSS: 현재 물리 메모리에 상주하는 메모리의 합계
- VmHWM: 프로세스 실행 이후 관측된 최대 RSS 값
- VmSize: 전체 가상 메모리 크기
- RssAnon: 익명 메모리 영역의 RSS
- RssFile: 파일 매핑 영역의 RSS
- RssShmem: 공유 메모리 영역의 RSS
- VmSwap: 프로세스가 스왑에 사용 중인 메모리
프로세스가 어떤 메모리 영역을 매핑하고 있는지 좀 더 자세히 확인하려면 pmap을 사용할 수 있습니다.
sudo pmap -x 1234
출력에는 메모리 매핑별 크기와 RSS 등이 표시됩니다. 특정 프로세스의 메모리 증가 원인을 조사할 때 애플리케이션 자체의 메모리 지표와 함께 참고할 수 있습니다.
4. 스왑과 메모리 압박 확인
메모리 사용률이 높아도 시스템이 정상적으로 캐시를 회수하고 있다면 반드시 문제가 있는 것은 아닙니다. 반대로 스왑 입출력이 계속 발생한다면 실제 메모리 압박이 있을 수 있습니다.
vmstat 1 5
첫 번째 줄은 부팅 이후 평균값이 포함될 수 있으므로, 이후 샘플의 si와 so를 확인합니다. 각각 스왑에서 메모리로 읽어들이는 양과 메모리에서 스왑으로 내보내는 양을 나타냅니다.
si와 so가 반복적으로 발생하면서 응답 지연이 함께 나타난다면 메모리 부족, 애플리케이션 메모리 증가 또는 과도한 동시 실행 작업을 추가로 확인해야 합니다.
5. OOM 발생 여부 확인
가용 메모리가 부족해지면 Linux 커널의 OOM 처리 과정에서 프로세스가 종료될 수 있습니다. 최근 커널 로그에 관련 기록이 있는지 확인합니다.
sudo journalctl -k | grep -Ei 'out of memory|oom|killed process'
관련 기록이 확인되면 종료된 프로세스 이름과 PID, 당시 메모리 상태를 확인한 뒤 애플리케이션 로그와 함께 분석해야 합니다.
6. 결과 해석 시 주의할 점
| 상황 | 확인할 내용 |
|---|---|
free 값이 매우 작음 |
Linux는 남는 RAM을 파일 캐시 등에 적극 활용합니다. free만 보지 말고 available을 함께 확인합니다. |
VIRT 또는 VSZ가 매우 큼 |
가상 주소 공간 전체 크기이므로 실제 RAM 사용량과 같지 않습니다. RES 또는 RSS를 확인합니다. |
| 프로세스 RSS가 계속 증가함 | 정상적인 캐시 증가인지, 처리량 증가인지, 애플리케이션 메모리 누수 가능성이 있는지 시간에 따라 관찰합니다. |
| Swap 사용량이 존재함 | 스왑이 사용 중이라는 사실만으로 장애라고 단정할 수 없습니다. vmstat의 지속적인 si/so, 지연 현상, MemAvailable을 함께 확인합니다. |
| 프로세스가 갑자기 사라짐 | 애플리케이션 오류뿐 아니라 OOM Killer에 의해 종료되었는지 커널 저널을 확인합니다. |
빠르게 확인하는 명령어 순서
서버 메모리 사용량이 갑자기 높아졌다면 다음 순서로 확인하면 원인을 빠르게 좁힐 수 있습니다.
free -h로 전체 메모리와available, Swap 상태 확인top또는ps로 RSS가 높은 프로세스 확인- 해당 PID의
/proc/PID/status와pmap으로 상세 메모리 확인 vmstat 1 5로 실제 스왑 입출력 확인- 필요하면 커널 저널에서 OOM 기록 확인
자주 묻는 질문
메모리 사용률이 90% 이상이면 바로 문제가 있는 것인가요?
반드시 그렇지는 않습니다. Linux는 사용하지 않는 RAM을 페이지 캐시 등에 활용하므로 전체 사용률만으로 장애를 판단하기 어렵습니다. MemAvailable, 스왑 입출력, 시스템 응답 속도와 프로세스 RSS를 함께 확인해야 합니다.
RSS와 VSZ 중 어떤 값을 봐야 하나요?
현재 물리 RAM 점유량을 비교하려면 RSS를 우선 확인하는 것이 좋습니다. VSZ는 프로세스의 전체 가상 주소 공간을 나타내며 실제로 RAM에 상주하지 않는 영역도 포함할 수 있습니다.
메모리 사용량이 높은 프로세스를 바로 kill해도 되나요?
권장하지 않습니다. 먼저 해당 프로세스가 어떤 서비스를 제공하는지, 현재 트래픽이나 작업량이 증가했는지, 애플리케이션 로그에 오류가 있는지 확인해야 합니다. 데이터베이스처럼 상태를 보유하는 서비스는 강제 종료 시 운영 장애가 발생할 수 있습니다.
Swap을 사용하고 있으면 메모리가 부족한 것인가요?
과거에 메모리 압박이 있었거나 커널의 메모리 관리 정책에 따라 일부 페이지가 스왑에 남아 있을 수 있습니다. 현재 vmstat에서 si와 so가 지속적으로 발생하는지, available 메모리가 충분한지를 함께 확인해야 합니다.
공식 참고자료
- Ubuntu Manpages - free(1): https://manpages.ubuntu.com/manpages/jammy/man1/free.1.html — 전체 물리 메모리, Swap, buff/cache, available 의미 확인 (조회일: 2026-08-24)
- Ubuntu Manpages - top(1): https://manpages.ubuntu.com/manpages/jammy/man1/top.1.html — 실시간 프로세스 및 %MEM, RES 등 메모리 항목 확인 (조회일: 2026-08-24)
- Ubuntu Manpages - ps(1): https://manpages.ubuntu.com/manpages/jammy/man1/procps.1.html — 프로세스 메모리 비율과 사용자 지정 정렬 항목 확인 (조회일: 2026-08-24)
- Ubuntu Manpages - vmstat(8): https://manpages.ubuntu.com/manpages/jammy/man8/vmstat.8.html — 메모리 및 Swap 입출력 통계 확인 (조회일: 2026-08-24)
- Ubuntu Manpages - pmap(1): https://manpages.ubuntu.com/manpages/jammy/man1/pmap.1.html — 프로세스 메모리 맵 확인 (조회일: 2026-08-24)
- Ubuntu Manpages - proc(5): https://manpages.ubuntu.com/manpages/jammy/man5/proc.5.html —
/proc/PID/status의 VmRSS, VmHWM, RSS 세부 항목 확인 (조회일: 2026-08-24) - Canonical - Ubuntu release cycle: https://ubuntu.com/about/release-cycle — Ubuntu 22.04 LTS 지원 일정 확인 (조회일: 2026-08-24)
마무리
Ubuntu 22.04에서 메모리 사용량이 높을 때는 전체 사용률만 확인하기보다 free -h의 available 메모리, 프로세스별 RSS, 스왑 입출력과 OOM 기록을 순서대로 확인하는 것이 중요합니다.
메모리 점유량이 높은 프로세스를 발견했다면 즉시 종료하기보다 해당 서비스의 정상적인 워크로드인지 먼저 확인하고, 시간이 지날수록 RSS가 계속 증가하는지 애플리케이션 로그 및 자체 모니터링 지표와 함께 분석하시기 바랍니다.
