1. 컴퓨터가 느려질 때 확인해야 할 것
컴퓨터에서 동시에 여러 프로그램을 실행하면 속도가 느려지거나 버벅거릴 수 있다. Windows에서는 이런 상황에서 작업 관리자를 열어 어떤 프로그램이 CPU나 메모리를 많이 사용하는지 확인한다.
Linux에서도 비슷한 방식으로 현재 시스템 상태와 프로세스별 자원 사용량을 확인할 수 있다.
이때 자주 사용하는 명령어가 top이다.
Linux man-pages의 top(1) 문서는 top이 실행 중인 시스템의 동적인 실시간 화면을 제공하고, 시스템 요약 정보와 Linux 커널이 관리하는 프로세스 또는 스레드 목록을 보여줄 수 있다고 설명한다. [1]
서버가 느려졌을 때 처음에는 아래 세 가지를 확인하면 된다.
- CPU 여유가 충분한지 확인한다.
- 메모리 여유가 충분한지 확인한다.
- CPU나 메모리를 많이 사용하는 프로세스를 찾는다.
2. top 실행하기
top은 아래처럼 실행한다.
top
실행하면 화면이 계속 갱신되면서 시스템 상태와 프로세스 목록이 표시된다.
예시 형태는 아래와 비슷하다.
top - 10:30:01 up 2:15, 1 user, load average: 0.10, 0.08, 0.05
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.0 us, 1.2 sy, 0.0 ni, 93.1 id, 2.0 wa, 0.0 hi, 0.7 si, 0.0 st
MiB Mem : 3840.0 total, 487.8 free, 1800.0 used, 1552.2 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1700.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 ubuntu 20 0 500000 120000 30000 S 40.0 3.1 0:10.20 java
입문 단계에서 위 내용을 모두 해석할 필요는 없다. 컴퓨터가 느릴 때는 먼저 CPU, 메모리, 프로세스 목록만 보면 된다.
top을 종료하려면 q를 누른다.
top(1) 문서는 q 키를 종료 명령으로 설명한다. [1]
3. CPU 여유 확인하기
CPU 상태는 %Cpu(s) 줄에서 확인한다.
%Cpu(s): 3.0 us, 1.2 sy, 0.0 ni, 93.1 id, 2.0 wa, 0.0 hi, 0.7 si, 0.0 st
여기서 처음에는 id 값을 보면 된다.
Linux man-pages의 top(1) 문서는 CPU 상태 줄의 id를 kernel idle handler에서 보낸 시간으로 설명한다. [1]
입문 단계에서는 id를 CPU가 쉬고 있는 비율, 즉 CPU 여유 정도로 이해하면 된다.
예를 들어 아래 값이 있다고 해보자.
93.1 id
이는 CPU가 대체로 여유로운 상태라고 볼 수 있다.
반대로 id 값이 매우 낮다면 CPU가 바쁘게 사용되고 있다는 뜻이므로, 서버가 느려질 가능성이 커진다.
| 값 | 입문 단계 해석 |
|---|---|
id가 높음 |
CPU 여유가 많음 |
id가 낮음 |
CPU 여유가 적음 |
4. 메모리 여유 확인하기
메모리 상태는 MiB Mem 줄에서 확인한다.
MiB Mem : 3840.0 total, 487.8 free, 1800.0 used, 1552.2 buff/cache
여기서 free는 현재 완전히 비어 있는 물리 메모리 양이다.
Linux man-pages의 top(1) 문서는 memory usage 영역에서 free가 /proc/meminfo의 MemFree에 해당한다고 설명한다. [1]
예를 들어 아래 값이 있다고 해보자.
487.8 free
이는 완전히 비어 있는 메모리가 약 487.8 MiB라는 뜻이다.
MiB는 mebibyte이며, top(1) 문서는 1 MiB = 1,048,576 bytes라고 설명한다. [1]
다만 Linux 메모리에서는 free만 보고 판단하면 부족할 수 있다.
top(1) 문서는 avail이 swap 없이 새 애플리케이션을 시작하는 데 사용할 수 있는 물리 메모리의 추정치이며, 회수 가능한 page cache와 memory slab까지 고려한다고 설명한다. [1]
따라서 메모리 상태를 볼 때는 아래처럼 이해하면 된다.
| 항목 | 의미 |
|---|---|
free |
지금 완전히 비어 있는 메모리 |
avail Mem |
새 프로그램 실행에 사용할 수 있는 메모리 추정치 |
입문 단계에서는 free 또는 avail Mem이 0에 가깝게 줄어드는지 먼저 확인하면 된다.
둘 다 매우 낮다면 메모리 부족으로 서버가 느려질 가능성이 있다.
5. CPU와 메모리를 많이 쓰는 프로세스 찾기
CPU나 메모리가 부족하다면 어떤 프로세스가 자원을 많이 쓰는지 확인해야 한다.
top의 아래쪽에는 프로세스 목록이 표시된다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 ubuntu 20 0 500000 120000 30000 S 40.0 3.1 0:10.20 java
2345 ubuntu 20 0 200000 80000 20000 S 5.0 2.0 0:03.10 nginx
처음에는 아래 항목을 보면 된다.
| 항목 | 의미 |
|---|---|
PID |
프로세스를 식별하는 ID |
%CPU |
해당 프로세스의 CPU 사용률 |
%MEM |
해당 프로세스의 메모리 사용률 |
COMMAND |
프로세스 이름 또는 실행 명령 |
Linux man-pages의 top(1) 문서는 %CPU가 마지막 화면 갱신 이후 경과한 CPU 시간 중 해당 작업이 사용한 비율이라고 설명한다. [1]
또한 %MEM은 해당 작업이 현재 사용 중인 물리 메모리의 resident share라고 설명한다. [1]
위 예시에서는 java 프로세스가 %CPU 40.0으로 가장 높다.
Spring Boot 서버를 Java로 실행했다면, 해당 Java 프로세스가 CPU를 많이 사용하고 있는지 의심해볼 수 있다.
6. top은 기본적으로 무엇을 위에 보여줄까?
실습 환경에 따라 설정은 다를 수 있지만, top은 보통 CPU 사용률이 높은 프로세스를 위쪽에 보여준다.
top(1) 문서는 -o 옵션으로 정렬 기준 필드를 지정할 수 있고, 필드를 high-to-low 또는 low-to-high로 정렬할 수 있다고 설명한다. [1]
또한 %CPU와 %MEM 같은 필드는 정렬 기준으로 사용할 수 있다. [1]
그래서 CPU를 많이 쓰는 프로세스를 찾고 싶다면 기본 화면에서 위쪽 프로세스부터 확인하면 된다.
메모리를 많이 쓰는 프로세스를 찾고 싶다면 M 키를 눌러 메모리 사용률 기준으로 정렬할 수 있다.
top(1) 문서는 M 키를 %MEM 기준 정렬 명령으로 설명한다. [1]
입문 단계에서는 아래만 기억하면 된다.
| 목적 | 방법 |
|---|---|
| CPU 많이 쓰는 프로세스 확인 | top 실행 후 위쪽 프로세스 확인 |
| 메모리 많이 쓰는 프로세스 확인 | top 실행 후 M 입력 |
| 종료 | q 입력 |
7. 서버가 느릴 때 확인하는 흐름
서버가 느려졌다고 느껴지면 아래 순서로 확인한다.
top을 실행한다.%Cpu(s)줄에서id값을 확인한다.MiB Mem줄에서free와avail Mem값을 확인한다.- CPU가 부족하면
%CPU가 높은 프로세스를 찾는다. - 메모리가 부족하면
M을 눌러%MEM이 높은 프로세스를 찾는다. - 어떤 프로세스인지 확인한 뒤 필요한 조치를 한다.
명령어는 아래와 같다.
top
top은 시스템 상태를 실시간으로 보여주기 때문에, 서버가 느려지는 순간에 어떤 프로세스가 자원을 많이 쓰는지 파악하는 데 도움이 된다.
다만 CPU나 메모리 사용률이 높다고 해서 무조건 문제가 있는 것은 아니다. 예를 들어 배치 작업, 빌드 작업, 백업 작업처럼 의도적으로 자원을 많이 쓰는 작업도 있다. 따라서 프로세스를 종료하기 전에는 반드시 어떤 작업인지 확인해야 한다.
정리
Linux에서 컴퓨터나 서버가 느려졌을 때는 top으로 CPU와 메모리 상태를 확인할 수 있다.
top
CPU 상태는 %Cpu(s) 줄에서 id 값을 먼저 본다.
id 값이 낮으면 CPU 여유가 적다는 뜻이다.
메모리 상태는 MiB Mem 줄에서 free와 avail Mem 값을 확인한다.
두 값이 매우 낮으면 메모리 부족 가능성이 있다.
어떤 프로세스가 원인인지 확인할 때는 프로세스 목록의 %CPU, %MEM, COMMAND를 본다.
메모리 기준으로 정렬하고 싶다면 M 키를 사용할 수 있다.
출처
[1] Linux man-pages, “top(1) - Linux manual page”, 확인일: 2026-06-12, https://man7.org/linux/man-pages/man1/top.1.html