top는 시스템의 전체적인 혹은 프로세스 별 리소스를 체크하기 위해 가장 널리 알려지고 간단하게 사용하는 명령어다.

[상단 %Cpu(s)]
us (user) : 사용자 영역 CPU
- 애플리케이션, 사용자 프로세스가 사용하고 있는 cpu
sy (system) : 커널 영역 CPU
- 커널, 시스템 콜, 드라이버 등 시스템에서 사용하고 있는 cpu
ni (nice) : nice 적용 프로세스
- nice 값이 변경된 프로세스 (우선순위 변경)
id (idle) : idle 상태, 놀고 있는 CPU 비율
wa (iowait) : I/O 대기
- 디스크, 네트워크 I/O 대기로 인해 CPU가 쉰 시간 비율
hi (hardware irq) : 하드웨어 인터럽트로 인해 CPU가 사용된 시간 비율
- NIC, disk 인터럽트 등...
si (software irq) : 소프트웨어 인터럽트로 인해 CPU가 사용된 시간 비율
- 커널 내부 인터럽트 처리
st (streal) : 가상화 환경에서 하이퍼바이저가 CPU를 가져간 시간.
각 지표 상황에 대한 해석
1. us + sy 가 높음 -> CPU 연산 위주 작업이 실행되고 있음.
2. wa가 높음 -> io 병목 체크 필요
3. id가 낮음 -> cpu 자원이 부족해질 수도 있음, 모니터링 필요
4. st가 높음 -> 현재 서버가 vm일 때 하이퍼바이저로부터 자원을 많이 못 받고 있음. 하이퍼바이저 체크 필요 (다른 vm이 과하게 점유하고 있거나, 리소스가 부족한 상태일 수 있음)
VIRT, RES, SHR
프로세스 항목 중 이 세 가지 항목은 현재 프로세스가 사용하고 있는 메모리와 관련된 값이다.
기본 단위는 KiB이다.
VIRT : 프로세스가 할당 받은 가상 메모리 전체 크기, 다음과 같은 내용들을 포함한다.
- 실제 사용 중인 메모리
- 아직 쓰진 않았지만 할당된 메모리
- 디스크에 있는 공유 라이브러리
- 스왑된 메모리
RES : 프로세스가 실제 물리 메로리를 사용하고 있는 크기
- 프로세스가 현재 실제로 읽고 쓰고 있는 데이터들이 RAM에 상주하는 크기
SHR : 다른 프로세스와 공유하고 있는 shared memory의 양
- 공유 라이브러리 (ex. glibc)
VIRT 는 가상 영역이기도 하고, malloc()로 예약만 하고 사용하진 않아도 올라가는 수치이기 때문에, 단순히 이 값이 큰 것이 문제가 되진 않는다.
중요한 것은 실제 사용하고 있는 메모리를 의미하는 RES 값이다. 프로세스들의 메모리 점유율을 체크하려면 해당 값을 확인해야 한다.

실제 운영중인 서버의 top 결과다.
맨 위 server가 실제 서비스 프로세스인데, 각 리소스 점유율을 확인할 수 있다.
'Linux' 카테고리의 다른 글
| ss (Socket Statistics) (1) | 2026.01.02 |
|---|---|
| vmstat (0) | 2025.12.30 |
| Load Average (0) | 2025.12.26 |
| interrupt와 context switch (0) | 2025.12.22 |
| I/O 스케줄러 (1) | 2025.12.19 |