리눅스 서버 리소스 모니터링의 중요성
서버를 운영하다 보면 “왜 갑자기 느려졌지?”, “메모리 부족인가?”, “CPU 사용률은 어떻지?” 같은 상황을 자주 마주하게 됨. 이런 상황에서 가장 먼저 사용하는 명령어가 바로 top과 free임.
이 두 명령어는 서버의 현재 상태를 실시간으로 파악할 수 있게 해주는 필수 명령어임.
top 명령어 – 실시간 프로세스 모니터
top 명령어란?
top은 현재 실행 중인 프로세스들을 CPU 사용률 순으로 정렬해서 실시간으로 보여주는 명령어임. 시스템의 전반적인 상태와 각 프로세스의 리소스 사용량을 한눈에 파악할 수 있음.
bash
# top
top 화면 구성 요소

시스템 요약 정보 (상단)
top - 21:59:16 up 25 days, 2:24, 1 user, load average: 0.03, 0.13, 0.07
Tasks: 142 total, 1 running, 141 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.8 us, 0.3 sy, 0.0 ni, 98.5 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3655.7 total, 2092.6 free, 1095.7 used, 839.2 buff/cache
MiB Swap: 4040.0 total, 4040.0 free, 0.0 used. 2560.0 avail Mem
각 라인의 의미:
| 항목 | 의미 | 중요 포인트 |
| 첫 번째 라인 | 현재 시간, 가동 시간, 접속 사용자 수, 로드 평균 | 로드 평균이 CPU 코어 수보다 높으면 주의 |
| Tasks | 전체 프로세스 수와 상태 | zombie 프로세스가 있으면 문제 상황 |
| %Cpu(s) | CPU 사용률 세부 정보 | us(사용자) + sy(시스템)가 높으면 CPU 부하 |
| MiB Mem | 메모리 사용 현황 | available 메모리가 부족하면 성능 저하 |
| MiB Swap | 스왑 사용 현황 | 스왑 사용량이 많으면 메모리 부족 신호 |
프로세스 목록 (하단)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 162344 2284 1448 S 1.7 0.1 0:01.23 systemd
5678 mysql 20 0 1847696 345672 29384 S 8.3 8.5 12:34.56 mysqld
| 컬럼 | 의미 | 설명 |
| PID | 프로세스 ID | 프로세스를 구분하는 고유 번호 |
| USER | 사용자 | 해당 프로세스를 실행한 사용자 |
| %CPU | CPU 사용률 | 해당 프로세스의 CPU 점유율 |
| %MEM | 메모리 사용률 | 전체 메모리 대비 사용 비율 |
| VIRT | 가상 메모리 | 프로세스가 사용하는 가상 메모리 크기 |
| RES | 물리 메모리 | 실제로 사용하는 물리 메모리 크기 |
| TIME+ | CPU 시간 | 누적 CPU 사용 시간 |
| COMMAND | 명령어 | 실행 중인 프로그램명 |
top 유용한 단축키
| 키 | 기능능 | 설명 |
| q | 종료 | top 명령어 종료 |
| 1 | CPU 코어별 표시 | 멀티코어 CPU의 각 코어 사용률 표시 |
| M | 메모리 사용량 정렬 | 메모리 사용량이 높은 순으로 정렬 |
| P | CPU 사용량 정렬 | CPU 사용량이 높은 순으로 정렬 (기본값) |
| k | 프로세스 종료 | 특정 PID의 프로세스를 종료 |
| u | 사용자 필터 | 특정 사용자의 프로세스만 표시 |
| c | 전체 명령어 표시 | COMMAND 컬럼에 전체 경로와 인수 표시 |
top 고급 옵션
bash
# top -u mysql # mysql 사용자 프로세스만 표시
# top -p 1234,5678 # 특정 PID만 모니터링
# top -d 5 # 5초마다 업데이트 (기본 3초)
# top -n 3 # 3번만 출력하고 종료
free -m 명령어 – 메모리 사용량 확인
free -m이란?
free 명령어는 시스템의 메모리 사용 현황을 보여줌. -m 옵션을 붙이면 MB 단위로 표시되어 사람이 읽기 쉬워짐. 메모리 관련 문제를 진단할 때 가장 먼저 사용하는 명령어임.
bash
# free -m
free -m 출력 해석
total used free shared buff/cache available
Mem: 3952 1456 1234 45 1260 2138
Swap: 2047 0 2047
메모리 라인 해석
| 항목 | 의미 | 중요 포인트 |
| total | 전체 메모리 | 시스템에 설치된 총 메모리 용 |
| used | 사용 중 메모리 | 애플리케이션이 실제로 사용하는 메모리 |
| free | 사용 가능 메모리 | 완전히 비어있는 메모리 |
| shared | 공유 메모리 | 여러 프로세스가 공유하는 메모리 |
| buff/cache | 버퍼/캐시 | 시스템이 성능 향상을 위해 사용하는 메모리 |
| available | 실제 사용 가능 메모리 | 실제로 사용할 수 있는 메모리 |
available의 중요성
available은 free + buff/cache와 비슷하지만 더 정확한 값임. 리눅스는 사용하지 않는 메모리를 캐시로 활용하는데, 필요할 때 즉시 해제할 수 있음. 따라서 available 값이 실제로 사용할 수 있는 메모리량임.
스왑 라인 해석
Swap: 2047 0 2047
- 스왑 사용량이 0이면 정상적인 상태
- 스왑을 사용하기 시작하면 메모리 부족 신호
- 스왑 사용량이 많으면 시스템 성능이 크게 저하됨
free 명령어 주요 옵션
| 옵션 | 설명 | 예시 |
| -m | MB 단위로 표시 | free -m |
| -g | GB 단위로 표시 | free -g |
| -h | 사람이 읽기 쉬운 형태 | free -h |
| -s | 지정한 초마다 반복 표시 | free -s 5 |
| -c | 지정한 횟수만큼 반복 | free -c 3 |
옵션설명예시-mMB 단위로 표시free -m-gGB 단위로 표시free -g-h사람이 읽기 쉬운 형태free -h-s지정한 초마다 반복 표시free -s 5-c지정한 횟수만큼 반복free -c 3
실무에서의 활용법
1. 서버 상태 빠른 점검
bash
# top
또는
# htop # 더 보기 좋은 버전
# free -m
2. 메모리 부족 상황 진단
bash
free -m
# available이 전체의 10% 미만이면 메모리 부족
3. 메모리를 많이 사용하는 프로세스 찾기
bash
top에서 M 키를 눌러 메모리 순 정렬
또는
# ps aux --sort=-%mem | head -10
4. CPU 사용률 높은 프로세스 찾기
bash
top에서 P 키를 눌러 CPU 순 정렬
또는
# ps aux --sort=-%cpu | head -10
5. 지속적인 모니터링
bash
5초마다 메모리 상태 확인
# free -m -s 5
top을 3초마다 업데이트
# top -d 3
문제 상황별 대응 방법
CPU 사용률이 높을 때
top으로 어떤 프로세스가 CPU를 많이 사용하는지 확인- 해당 프로세스가 정상적인 작업인지 판단
- 필요시
kill명령어로 프로세스 종료 - 로드 평균이 CPU 코어 수보다 지속적으로 높다면 CPU 업그레이드 고려
메모리 부족 상황
free -m으로 available 메모리 확인top에서 M 키로 메모리 사용량 순 정렬- 불필요한 프로세스 종료
- 스왑 사용량이 많다면 메모리 증설 고려
스왑 사용량이 높을 때
bash
스왑을 사용하는 프로세스 확인
# for file in /proc/*/status; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n | tail
모니터링 자동화
리소스 경고 스크립트 예시
#!/bin/bash
# 메모리 사용률이 90% 이상일 때 경고
AVAILABLE=$(free -m | grep '^Mem:' | awk '{print $7}')
TOTAL=$(free -m | grep '^Mem:' | awk '{print $2}')
USAGE=$((100 - (AVAILABLE * 100 / TOTAL)))
if [ $USAGE -gt 90 ]; then
echo "WARNING: Memory usage is ${USAGE}%"
fi
추가 유용한 도구들
htop – top의 개선된 버전
bash
설치 (Ubuntu/Debian)
# sudo apt install htop
실행
# htop
- 컬러풀한 인터페이스
- 마우스 지원
- 프로세스 트리 구조 표시
iostat – I/O 통계
bash
# iostat -x 1
CPU와 함께 디스크 I/O 상태도 확인 가능