메뉴 닫기

리눅스 시스템 리소스 확인 명령어 총정리, 병목 진단까지 한 번에

리눅스 시스템 리소스 확인 명령어 총정리, 병목 진단까지 한 번에

💻 top부터 mpstat까지, 서버 성능 체크에 필요한 모든 명령어 완벽 가이드

서버를 운영하다 보면 갑작스럽게 시스템이 느려지거나 특정 프로세스가 비정상적으로 자원을 점유하는 상황이 발생할 수 있습니다.
이럴 때 빠르게 문제를 파악하고 해결하기 위해서는 리눅스의 다양한 리소스 모니터링 명령어를 잘 활용하는 것이 중요합니다.
각 명령어마다 CPU, 메모리, 디스크 I/O, 네트워크, 시스템 부하 등 특정 영역의 상태를 세밀하게 분석할 수 있으며, 이를 종합하면 병목 지점을 정확하게 진단할 수 있습니다.
이번 글에서는 실무에서 자주 사용하는 top, free -m, vmstat, iostat, uptime, mpstat 명령어를 중심으로 리소스 상태 점검과 병목 분석 방법을 정리해 드립니다.

특히 이 글은 단순히 명령어 사용법만 나열하는 것이 아니라, 실제 서버 환경에서 어떤 상황에 어떤 명령어를 우선적으로 활용해야 하는지, 출력 결과를 어떻게 해석해야 하는지까지 실무 관점에서 풀어내고 있습니다.
리눅스를 처음 접하는 분뿐 아니라, 이미 서버를 운영 중인 관리자에게도 바로 도움이 될 수 있는 실전 가이드를 목표로 합니다.



🖥️ top으로 실시간 프로세스 및 자원 점유율 확인

리눅스 서버의 현재 상태를 가장 직관적으로 파악할 수 있는 명령어 중 하나가 바로 top입니다.
이 명령어는 CPU, 메모리, 로드 애버리지(load average) 등 시스템 전반의 상태를 실시간으로 보여주며, 각 프로세스가 차지하는 자원 비율까지 확인할 수 있습니다.
서버 부하가 발생했을 때 가장 먼저 실행해 볼 만한 명령어이기도 합니다.

🔍 top 출력에서 주목해야 할 주요 지표

top 명령어를 실행하면 화면 상단에는 CPU 사용량, 메모리 사용량, 시스템 부하(load average) 등이 표시됩니다.
특히 다음 항목들은 반드시 살펴봐야 합니다.

  • 💠load average : 1, 5, 15분간 평균 부하를 보여줍니다. CPU 코어 수 대비 값이 높으면 병목 가능성이 큽니다.
  • 🧠%CPU : 각 프로세스가 점유하는 CPU 비율입니다. 비정상적으로 높은 프로세스를 빠르게 찾을 수 있습니다.
  • 📦%MEM : 메모리 점유율로, 메모리 누수나 과도한 사용을 감지할 수 있습니다.

⚡ top 사용 팁과 실전 활용

top 실행 후 Shift + P를 누르면 CPU 사용률 순으로, Shift + M을 누르면 메모리 사용량 순으로 정렬됩니다.
또한 k 키를 누른 후 프로세스 ID를 입력하면 해당 프로세스를 종료할 수 있어, 긴급 상황에서 매우 유용합니다.

CODE BLOCK
top
# CPU 사용률 기준 정렬
Shift + P

# 메모리 사용량 기준 정렬
Shift + M

# 프로세스 종료
k <PID>

💡 TIP: top은 서버 부하 상황에서 가장 먼저 확인해야 하는 명령어입니다. 다만, 순간적인 수치보다는 일정 시간 관찰하며 평균적인 패턴을 파악하는 것이 정확한 진단에 도움이 됩니다.

📊 free -m으로 메모리 사용량 체크

리눅스에서 메모리 사용 현황을 가장 간단하게 확인할 수 있는 명령어가 바로 free입니다.
특히 -m 옵션을 사용하면 단위가 메가바이트(MB)로 표시되어 용량을 직관적으로 파악할 수 있습니다.
서버 메모리가 부족하면 응답 지연, 스왑 사용 증가, 프로세스 종료 등의 문제가 발생할 수 있으므로, 정기적으로 확인하는 습관이 필요합니다.

🔍 free 출력 항목 해석하기

free -m 명령어 출력은 크게 총 메모리(total), 사용 중(used), 사용 가능(available)로 구분됩니다.
여기서 ‘available’ 값은 실제 애플리케이션이 추가로 사용할 수 있는 메모리 용량을 나타내므로, 메모리 부족 여부를 판단할 때 가장 중요한 지표입니다.

  • 💠total : 서버의 전체 메모리 용량
  • 📦used : 현재 사용 중인 메모리 용량
  • 🟢available : 추가로 사용할 수 있는 메모리, 부족하면 성능 저하 가능

⚡ 실전 활용 예시

메모리 사용량이 갑자기 증가했다면, top 명령어로 어떤 프로세스가 메모리를 많이 점유하는지 확인해야 합니다.
만약 available 값이 지속적으로 낮다면, 스왑(swap) 사용량이 증가하는지 vmstat 또는 swapon 명령어로 추가 점검이 필요합니다.

CODE BLOCK
free -m
              total    used    free  shared  buff/cache  available
Mem:          16023    9254    1220     534        5548       5860
Swap:          2047       0    2047

⚠️ 주의: free 명령어에서 ‘used’ 값이 높더라도, available 값이 충분하다면 실제 메모리 부족 상태는 아닙니다. 캐시/버퍼 메모리를 OS가 유연하게 관리하기 때문입니다.



⚙️ vmstat으로 CPU, 메모리, I/O 종합 모니터링

vmstat 명령어는 CPU, 메모리, 프로세스, 디스크 I/O, 스왑 사용 현황까지 한 번에 확인할 수 있는 강력한 도구입니다.
특히 특정 시점이 아닌 일정 주기로 데이터를 출력할 수 있어, 부하 상황에서의 추이를 관찰하기에 좋습니다.
단일 명령어로 여러 리소스를 종합적으로 모니터링하고 싶을 때 유용합니다.

🔍 vmstat 주요 컬럼 설명

vmstat 출력은 크게 프로세스, 메모리, 스왑, I/O, 시스템, CPU로 나뉩니다.
각 항목에서 다음 지표들은 반드시 확인해야 합니다.

  • r : 실행 대기 중인 프로세스 수, CPU 코어 수보다 많으면 부하 발생 가능
  • 📦free : 사용 가능한 메모리 양
  • 💾si / so : 스왑 인/아웃 발생량, 값이 높으면 메모리 부족 신호
  • us / sy / id / wa : 사용자, 시스템, 유휴, I/O 대기 비율

⚡ vmstat 활용 예시

다음 예시는 2초 간격으로 5번 데이터를 출력하는 방법입니다.
이렇게 하면 순간적인 부하뿐만 아니라, 시간에 따른 변화를 확인할 수 있습니다.

CODE BLOCK
vmstat 2 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   free  buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0  52312 43124 93248    0    0     1     2   25   60 10  5 85  0  0

💡 TIP: vmstat은 top이나 iostat과 함께 사용하면, CPU·메모리·디스크의 상관관계를 한눈에 파악할 수 있어 원인 분석이 훨씬 빨라집니다.

💾 iostat으로 디스크 I/O 성능 분석

iostat 명령어는 디스크 장치별 입출력 성능을 분석하는 데 유용합니다.
CPU 사용량과 스토리지 I/O를 함께 보여주기 때문에, 디스크 병목 여부를 빠르게 판단할 수 있습니다.
특히 대용량 데이터베이스 서버나 파일 서버 운영 시 필수적으로 확인해야 할 명령어입니다.

🔍 iostat 주요 지표

iostat 출력에는 CPU 상태와 디스크 I/O 통계가 함께 표시됩니다.
다음 값들을 특히 주의 깊게 살펴보아야 합니다.

  • 📥r/s, w/s : 초당 읽기/쓰기 요청 수
  • 📈rkB/s, wkB/s : 초당 읽기/쓰기 데이터 양(KB)
  • ⏱️await : I/O 요청 처리까지 걸린 평균 대기 시간(ms), 값이 높으면 병목 가능성
  • ⚠️%util : 디스크 사용률, 100%에 가까우면 포화 상태

⚡ iostat 활용 예시

다음 예시는 2초 간격으로 3번, 디스크별 I/O 상황을 출력하는 명령어입니다.
이를 통해 읽기/쓰기 요청이 비정상적으로 많은지, 처리 속도가 느린지 확인할 수 있습니다.

CODE BLOCK
iostat -x 2 3
Linux 5.15.0 (server) 	08/12/2025 	_x86_64_	(4 CPU)

Device            r/s     w/s   rkB/s   wkB/s  await svctm  %util
sda              12.5     3.0   512.0   256.0    2.1   1.0   15.5

⚠️ 주의: %util 값이 장시간 90% 이상이라면 디스크 확장, SSD 교체, 워크로드 분산 등 대책이 필요합니다.



⏱️ uptime과 mpstat으로 시스템 부하와 CPU 활용도 확인

서버가 버거워하고 있는지 한눈에 가늠하고 싶다면 uptimempstat 조합이 가장 간단하면서도 강력합니다.
uptime은 최근 1, 5, 15분 기준의 평균 부하(load average)를 보여주어 추세를 즉시 파악하게 해줍니다.
mpstat은 CPU 전체와 코어별 사용 비율을 나눠 보여주므로 어떤 종류의 부하가 문제인지 구체적으로 짚어낼 수 있습니다.
두 출력을 함께 해석하면 CPU 포화, I/O 대기, 가상화 환경의 steal time 등 병목의 실체를 빠르게 좁힐 수 있습니다.

🧭 uptime으로 로드 애버리지 읽는 법

load average는 실행 중 또는 실행 대기 중인 태스크의 평균 개수를 의미합니다.
일반적으로 코어 수와 같은 값이면 꽉 찬 상태, 그보다 크면 대기열이 쌓이고 있다고 해석합니다.
1분값이 높고 15분값이 낮다면 방금 급격한 부하가 생긴 상태일 수 있습니다.
반대로 1·5·15분이 모두 높게 유지되면 지속적인 포화가 의심됩니다.

CODE BLOCK
uptime
 14:22:07 up 12 days,  4:10,  3 users,  load average: 6.42, 5.87, 4.11
# 해석: 최근 1분 > 5분 > 15분 → 부하가 증가하는 추세

  • 🧮코어 수와 비교 : load average ÷ 코어 수 ≈ 1 이상이면 포화 가능성.
  • 📈추세 판단 : 1분 > 5분 > 15분이면 부하 상승, 반대면 완화 추세.

🧠 mpstat으로 코어별 CPU 사용률 분석

mpstat은 sysstat 패키지에 포함된 도구로, 전체 및 코어별 CPU 사용률을 주기적으로 출력합니다.
특히 %usr(사용자 영역), %sys(커널), %iowait(I/O 대기), %steal(가상화 환경에서 하이퍼바이저에 의해 빼앗긴 시간), %idle(유휴)을 주의 깊게 봅니다.
어떤 코어만 치솟는다면 스레드 핫스팟이 의심되고, 전체적으로 %iowait가 높다면 디스크 병목 가능성이 큽니다.

CODE BLOCK
mpstat -P ALL 1 5
Linux 5.15.0 (server)  08/12/2025  _x86_64_  (8 CPU)

02:22:08 PM  CPU   %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:22:09 PM  all   32.5  0.00  7.2     9.8 0.00  0.6     0.0    0.0    0.00  49.9
02:22:09 PM    3   78.2  0.00  9.1     2.0 0.00  1.2     0.0    0.0    0.00   9.5
# 해석: 코어 3이 비정상적으로 높은 %usr → 특정 스레드 집중 실행 가능성

🧪 실전 점검 루틴

1단계로 uptime에서 부하 추세를 확인합니다.
2단계로 mpstat에서 %usr·%sys·%iowait·%steal을 코어별로 비교합니다.
3단계로 상황에 따라 top, iostat, vmstat 결과와 교차 검증해 원인을 확정합니다.

증상 의심 원인 · 다음 액션
load average가 코어 수 >= 1 지속 CPU 포화 가능성.
mpstat의 %usr·%sys를 확인하고, top으로 상위 프로세스 추적.
%iowait가 높음 디스크 병목 의심.
iostat -x로 await·%util 점검 후 워크로드 분산 또는 스토리지 튜닝.
특정 코어만 %usr↑ 스레드 핫스팟 가능.
프로세스 바인딩 확인, 스레드 풀·병렬화 설정 조정.
%steal이 눈에 띄게 높음 가상화 호스트 리소스 경쟁.
상위 호스트 밀집도 조정 또는 vCPU 할당 변경.

💡 TIP: 부하가 간헐적이라면 watch로 반복 관찰하거나, sysstat의 sar를 활성화해 장기 추이를 기록해 두면 근본 원인 분석이 쉬워집니다.

⚠️ 주의: load average는 CPU만의 지표가 아닙니다.
I/O 대기 태스크도 포함되므로, 값이 높다고 무조건 CPU 증설로 해결되지 않습니다.
반드시 mpstat·iostat·vmstat와 함께 교차 확인하세요.

자주 묻는 질문 (FAQ)

top과 htop의 차이는 무엇인가요?
htop은 top의 향상된 버전으로, 마우스 지원과 더 직관적인 인터페이스를 제공합니다. CPU·메모리 사용량을 색상으로 표시하며 프로세스 탐색이 편리합니다.
free 명령어에서 used 값이 높은데, 메모리가 부족한 건가요?
아닙니다. 리눅스는 성능 최적화를 위해 메모리를 캐시/버퍼로 적극 활용합니다. 실제 부족 여부는 available 값으로 판단해야 합니다.
vmstat의 si/so 값이 의미하는 것은 무엇인가요?
si는 스왑 인(swap in), so는 스왑 아웃(swap out)을 의미합니다. 값이 높으면 물리 메모리가 부족해 스왑이 자주 발생하는 상태입니다.
iostat의 %util 값이 100%에 가깝다면 어떻게 해야 하나요?
디스크가 포화 상태임을 의미합니다. 스토리지 확장, SSD로 교체, 워크로드 분산 등 성능 개선 조치를 검토해야 합니다.
uptime에서 load average 값이 높으면 무조건 CPU가 부족한 건가요?
아닙니다. load average에는 CPU뿐 아니라 I/O 대기 태스크도 포함됩니다. iostat과 vmstat을 함께 확인해야 정확한 원인 파악이 가능합니다.
mpstat에서 %steal 값이 높게 나오는데, 의미가 무엇인가요?
가상화 환경에서 하이퍼바이저에 의해 CPU 시간이 다른 VM에 할당되는 비율입니다. 호스트 리소스 경쟁이 심할 때 높아집니다.
이 명령어들은 루트 권한이 꼭 필요한가요?
대부분의 기본 정보는 일반 사용자 권한으로 확인 가능합니다. 하지만 프로세스 종료 등 특정 작업은 루트 권한이 필요합니다.
서버 모니터링 자동화를 위해 추천하는 방법이 있나요?
sysstat 패키지의 sar, atop, glances 등 툴을 사용해 주기적으로 데이터를 수집하고, Grafana·Prometheus로 시각화하는 방법을 추천합니다.

📌 리눅스 리소스 모니터링 핵심 요약

서버 성능 저하나 장애를 예방하려면 실시간 모니터링과 정확한 진단이 필수입니다.
리눅스 환경에서는 top, free -m, vmstat, iostat, uptime, mpstat 등 다양한 명령어를 통해 CPU, 메모리, 디스크 I/O, 부하 상태를 신속하게 파악할 수 있습니다.
이 글에서는 각 명령어의 특징과 실전 활용법, 해석 포인트를 함께 정리했습니다.
특히 각 지표의 의미를 올바르게 이해하고, 단일 데이터가 아닌 여러 결과를 종합적으로 해석하는 습관이 중요합니다.
이를 통해 순간적인 부하뿐만 아니라 장기적인 성능 추세까지 관리할 수 있으며, 장애 대응 속도와 정확성을 크게 높일 수 있습니다.
결국 꾸준한 모니터링과 분석은 안정적인 서버 운영의 핵심입니다.


🏷️ 관련 태그 : 리눅스명령어, 시스템모니터링, 서버관리, top, freem, vmstat, iostat, uptime, mpstat, 서버성능, 병목진단