🔥 가장 많이 쓰는 top 단축키
| 키 | 기능 | 설명 |
|---|---|---|
q | 종료 | top 종료 |
h | 도움말 | 모든 단축키 보기 |
k | 프로세스 종료 | PID 입력 후 kill |
r | nice 값 변경 | 프로세스 우선순위 변경 |
c | 명령어 전체 표시 | 프로그램 경로 표시 |
P | CPU 사용률 정렬 | CPU 많이 쓰는 순 |
M | 메모리 사용률 정렬 | 메모리 많이 쓰는 순 |
T | 실행 시간 정렬 | 오래 실행된 순 |
N | PID 정렬 | PID 기준 정렬 |
| R | 정렬 역순 | 정렬 방향 반전 |
| 1 | CPU 코어별 보기 | CPU 코어별 사용률 표시 |
| t | CPU 정보 토글 | CPU 사용률 영역 표시/숨김 |
| m | 메모리 정보 토글 | 메모리 정보 표시/숨김 |
| l | Load average 토글 | load average 표시/숨김 |
| i | Idle 프로세스 숨김 | CPU 사용 중인 프로세스만 표시 |
| u | 사용자 필터 | 특정 사용자 프로세스만 표시 |
| d | refresh 시간 변경 | 화면 갱신 주기 변경 |
| s | refresh 시간 변경 (구버전) | 갱신 간격 설정 |
| f | 표시 컬럼 설정 | top 컬럼 추가/삭제 |
| W | 설정 저장 | 현재 top 설정 저장 |
| V | 트리 구조로 부모-자식 관계 표시 | |
| v | 선택한 프로세스의 자식 프로세스 숨기기/보이기 | |
| F | 포커스 모드 진입 |
단축키 도움말
# 원문
Help for Interactive Commands - procps-ng 4.0.4
Window 1:Def: Cumulative mode Off. System: Delay 3.0 secs; Secure mode Off.
Z,B,E,e Global: 'Z' colors; 'B' bold; 'E'/'e' summary/task memory scale
l,t,m,I,0 Toggle: 'l' load avg; 't' task/cpu; 'm' memory; 'I' Irix; '0' zeros
1,2,3,4,5 Toggle: '1/2/3' cpu/numa views; '4' cpus abreast; '5' P/E-cores
f,X Fields: 'f' add/remove/order/sort; 'X' increase fixed-width fields
L,&,<,> . Locate: 'L'/'&' find/again; Move sort column: '<'/'>' left/right
R,H,J,C . Toggle: 'R' Sort; 'H' Threads; 'J' Num justify; 'C' Coordinates
c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' Str justify
x,y . Toggle highlights: 'x' sort field; 'y' running tasks
z,b . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')
u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria
n,#,^O . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s)
V,v,F . Toggle: 'V' forest view; 'v' hide/show children; 'F' keep focused
d,k,r,^R 'd' set delay; 'k' kill; 'r' renice; Ctrl+'R' renice autogroup
^G,K,N,U View: ctl groups ^G; cmdline ^K; environment ^N; supp groups ^U
Y,!,^E,P Inspect 'Y'; Combine Cpus '!'; Scale time ^E; View namespaces ^P
W,q Write config file 'W'; Quit 'q'
( commands shown with '.' require a visible task display window )
Press 'h' or '?' for help with Windows,
# 번역본
대화형 명령어 도움말 - procps-ng 4.0.4
창 1: 기본값(Def): 누적 모드 꺼짐. 시스템: 갱신 지연 3.0초; 보안 모드 꺼짐.
Z,B,E,e 전역 설정: 'Z' 색상; 'B' 굵게 표시; 'E'/'e' 요약/작업 메모리 표시 단위
l,t,m,I,0 토글: 'l' load average; 't' 작업/CPU; 'm' 메모리; 'I' Irix 모드; '0' 0 값 표시
1,2,3,4,5 토글: '1/2/3' CPU/NUMA 보기; '4' CPU 가로 나열; '5' P/E 코어 표시
f,X 필드: 'f' 필드 추가/제거/순서/정렬; 'X' 고정 너비 필드 크기 증가
L,&,<,> . 검색: 'L'/'&' 찾기/다시 찾기; 정렬 열 이동: '<'/'>' 왼쪽/오른쪽
R,H,J,C . 토글: 'R' 정렬 방향; 'H' 스레드 표시; 'J' 숫자 정렬; 'C' 좌표 표시
c,i,S,j . 토글: 'c' 명령어 이름/전체 명령줄; 'i' 유휴 작업; 'S' 시간; 'j' 문자열 정렬
x,y . 강조 토글: 'x' 정렬 필드 강조; 'y' 실행 중 작업 강조
z,b . 토글: 'z' 컬러/흑백; 'b' 굵게/역상 (x 또는 y가 활성화된 경우)
u,U,o,O . 필터: 'u'/'U' 실행 사용자/모든 사용자; 'o'/'O' 다른 조건
n,#,^O . 설정: 'n'/'#' 표시할 최대 작업 수; 표시: Ctrl+'O' 다른 필터 보기
V,v,F . 토글: 'V' 트리(forest) 보기; 'v' 자식 프로세스 숨김/표시; 'F' 포커스 유지
d,k,r,^R 'd' 갱신 지연 설정; 'k' 프로세스 종료; 'r' nice 값 변경; Ctrl+'R' autogroup nice 변경
^G,K,N,U 보기: Ctrl+'G' 제어 그룹; Ctrl+'K' 명령줄; Ctrl+'N' 환경 변수; Ctrl+'U' 보조 그룹
Y,!,^E,P 검사: 'Y' 상세 검사; '!' CPU 결합; Ctrl+'E' 시간 단위 변경; Ctrl+'P' 네임스페이스 보기
W,q 'W' 설정 파일 저장; 'q' 종료
( '.' 표시가 있는 명령어는 작업 목록 창이 보일 때만 사용 가능 )
Windows 관련 도움말은 'h' 또는 '?' 키를 누르십시오.
예시 (기본)
[lycos7560@DMT-RL01 ~]$ top
top - 03:42:50 up 2 min, 2 users, load average: 0.01, 0.00, 0.00
Tasks: 269 total, 1 running, 268 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.1 hi, 0.0 si, 0.0 st
MiB Mem : 3621.8 total, 3136.7 free, 512.6 used, 187.3 buff/cache
MiB Swap: 4008.0 total, 4008.0 free, 0.0 used. 3109.2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28 root 20 0 0 0 0 I 0.3 0.0 0:00.17 kworker/1:0-events
1 root 20 0 49176 40952 10468 S 0.0 1.1 0:02.13 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pool_workqueue_release
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-rcu_gp
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-sync_wq
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-slub_flushwq
7 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-netns
8 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0-events
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
10 root 20 0 0 0 0 I 0.0 0.0 0:00.10 kworker/0:1-events
11 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/u512:0-async
12 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-mm_percpu_wq
13 root 20 0 0 0 0 I 0.0 0.0 0:00.69 kworker/u512:1-async
14 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_kthread
15 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_rude_kthread
16 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_trace_kthread
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
18 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_preempt
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_exp_par_gp_kthread_worker/1
20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_exp_gp_kthread_worker
21 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
22 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/0
23 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
24 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
25 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/1
26 root rt 0 0 0 0 S 0.0 0.0 0:00.52 migration/1
27 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1
29 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-events_highpri
30 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/2
31 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/2
32 root rt 0 0 0 0 S 0.0 0.0 0:00.52 migration/2
33 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/2
34 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/2:0-rcu_gp
35 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/2:0H-events_highpri
36 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/3
37 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/3
38 root rt 0 0 0 0 S 0.0 0.0 0:00.53 migration/3
39 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/3
40 root 20 0 0 0 0 I 0.0 0.0 0:00.09 kworker/3:0-events
41 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/3:0H-events_highpri
43 root 20 0 0 0 0 I 0.0 0.0 0:00.02 kworker/u512:2-async
1️⃣ 시스템 전체 상태
top - 03:42:50 up 2 min, 2 users, load average: 0.05, 0.05, 0.02
| 항목 | 의미 |
|---|---|
03:42:50 | 현재 시스템 시간 |
up 2 min | 시스템이 부팅된 후 가동 시간 |
2 users | 현재 로그인한 사용자 수 |
load average | 시스템 평균 부하 |
load average
0.05, 0.05, 0.02
각 의미
| 값 | 의미 |
|---|---|
| 첫번째 | 1분 평균 부하 |
| 두번째 | 5분 평균 부하 |
| 세번째 | 15분 평균 부하 |
👉 Load Average 의미
CPU가 처리해야 할 대기 작업 수
CPU 실행중 프로세스 CPU 실행 대기 프로세스 Disk I/O 대기 프로세스
예시
| CPU 코어 | 정상 load |
|---|---|
| 1 core | 1.0 |
| 4 core | 4.0 |
지금 값
0.05 ➡ 거의 아무 작업도 없는 상태 👍
2️⃣ 프로세스 상태
Tasks: 269 total, 1 running, 268 sleeping, 0 stopped, 0 zombie
| 항목 | 의미 |
|---|---|
| total | 전체 프로세스 수 |
| running | 실행 중 |
| sleeping | 대기 상태 |
| stopped | 중지된 프로세스 |
| zombie | 좀비 프로세스 |
현재 상태
| 상태 | 값 |
|---|---|
| 전체 프로세스 | 269 |
| 실행 중 | 1 |
| 대기 | 268 |
| 좀비 | 0 |
👉 대부분 시스템 프로세스는 sleep 상태입니다.
3️⃣ CPU 사용률
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.1 hi, 0.0 si, 0.0 st
CPU 사용률 항목
| 항목 | 의미 |
|---|---|
| us (user) | 사용자 프로그램 사용 CPU |
| sy (system) | 커널 사용 CPU |
| ni (nice) | nice 값 조정된 프로세스 nice 값이 변경된 프로세스가 사용한 CPU로 이 작업이 CPU를 20% 사용하면 %Cpu(s): 5 us, 3 sy, 20 ni, … |
| id (idle) | CPU 유휴 상태 |
| wa (wait) | I/O 대기 |
| hi | 하드웨어 인터럽트 |
| si | 소프트웨어 인터럽트 |
| st | VM에서 CPU 뺏긴 시간 |
현재 상태
100% idle ➡ CPU 완전 여유 상태
멀티코어 환경에서 100%를 초과할 수 있음
(예: 4코어면 최대 400%)
4️⃣ 메모리 정보
MiB Mem : 3621.8 total, 3136.7 free, 512.6 used, 187.3 buff/cache MiB Swap: 4008.0 total, 4008.0 free, 0.0 used. 3109.2 avail Mem
| 항목 | 의미 |
|---|---|
| total | 전체 메모리 |
| free | 완전히 남은 메모리 |
| used | 실제 사용 |
| buff/cache | 캐시 / 버퍼 |
현재 상태
| 항목 | 값 |
|---|---|
| total | 3621MB |
| free | 3136MB |
| used | 512MB |
| cache | 187MB |
참고: 리눅스는 남는 메모리를 캐시로 사용하므로 free 메모리가 적어도 실제로는 여유가 많을 수 있다.
예를 들어
free 3137 MB
buff/cache 187 MB
≈ 3324 MB
# 추가적으로 리눅스에서는 일부 메모리 커널이 예약(reserved)함.
4096 MB - 약 400~500 MB
≈ 3600 MB
[lycos7560@DMT-RL01 ~]$ free -h
total used free shared buff/cache available
Mem: 3.5Gi 506Mi 3.1Gi 9.0Mi 187Mi 3.0Gi
Swap: 3.9Gi 0B 3.9Gi
실무에서는 출력에서 free -h의 available 만 본다.
Swap 정보
Swap(스왑)은 리눅스에서 메모리(RAM)가 부족할 때 사용하는 디스크 공간으로 쉽게 말하면 RAM의 임시 확장 공간입니다.
RAM이 부족하면 운영체제는 일부 데이터를 디스크로 옮겨서 공간을 확보합니다.
이 디스크 공간을 Swap이라고 합니다.
RAM = 4GB
프로그램 실행 = 5GB 필요
4GB → RAM
1GB → Swap
RAM 부족 → 일부 데이터를 디스크로 이동
단, Swap은 디스크를 사용하기 때문에 매우 느립니다.
MiB Swap: 4008.0 total, 4008.0 free, 0.0 used. 3109.2 avail Mem
| 항목 | 의미 |
|---|---|
| total | swap 전체 |
| free | 남은 swap |
| used | 사용된 swap |
| avail Mem | 실제 사용 가능한 메모리 |
현재 상태
| 항목 | 값 |
|---|---|
| swap total | 4GB |
| swap used | 0 |
➡ swap 사용 없음 (아주 좋은 상태)
5️⃣ 프로세스 정보 영역 (Process List)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28 root 20 0 0 0 0 I 0.3 0.0 0:00.17 kworker/1:0-events
1 root 20 0 49176 40952 10468 S 0.0 1.1 0:02.13 systemd
.... 생략
| 항목 | 의미 |
|---|---|
| PID | 프로세스 ID |
| USER | 프로세스를 실행한 사용자 |
| PR | 프로세스 우선순위 (Priority) |
| NI | nice 값 (우선순위 조정 값) |
| VIRT | 가상 메모리 사용량 |
| RES | 실제 RAM 사용량 |
| SHR | 다른 프로세스와 공유하는 메모리 |
| S | 프로세스 상태 |
| %CPU | CPU 사용률 |
| %MEM | 메모리 사용률 |
| TIME+ | CPU 사용 누적 시간 |
| COMMAND | 실행된 명령어 |
PID (Process ID)
프로세스의 고유 번호입니다.
# 리눅스에서 systemd은 항상 PID 1
# 리눅스 시스템의 최초 프로세스
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 49176 40952 10468 S 0.0 1.1 0:02.15 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pool_workqueue_release
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-rcu_gp
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-sync_wq
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-slub_flushwq
7 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-netns
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
12 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-mm_percpu_wq
14 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_kthread
15 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_rude_kthread
16 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_trace_kthread
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
18 root 20 0 0 0 0 I 0.0 0.0 0:00.02 rcu_preempt
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_exp_par_gp_kthread_worker/1
20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_exp_gp_kthread_worker
21 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
22 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/0
23 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
24 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
25 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/1
26 root rt 0 0 0 0 S 0.0 0.0 0:00.53 migration/1
27 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1
29 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-events_highpri
30 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/2
31 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/2
32 root rt 0 0 0 0 S 0.0 0.0 0:00.53 migration/2
33 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/2
35 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/2:0H-events_highpri
... 생략
PR (Priority)
프로세스의 실제 스케줄러 우선순위
(일반적으로 PR = 20 이 기본)
일반 프로세스는 PR = 20 + NI, 실시간 프로세스는 PR이 -100 등으로 낮게 표시됨
| 값 | 의미 |
|---|---|
| 낮을수록 | 높은 우선순위 |
| 높을수록 | 낮은 우선순위 |
NI (Nice Value)
CPU 우선순위를 조정하는 값 (-20 ~ 19)
| 값 | 의미 |
|---|---|
| -20 | 최고 우선순위 |
| 0 | 기본 |
| 19 | 가장 낮음 |
VIRT (Virtual Memory)
프로세스가 확보한 가상 메모리 전체.
실제로 물리 메모리(RES)나 스왑을 사용하지 않더라도, 주소 공간만 확보한 경우도 포함.
RAM Swap Shared library Mapped file #즉, 프로세스가 접근 가능한 전체 메모리 공간
RES (Resident Memory)
실제 물리 메모리에 상주하는 크기. (프로세스가 현재 사용 중인 RAM)
실제 물리 메모리 사용량 systemd RES = 40952 KB (약 40MB RAM 사용)
SHR (Shared Memory)
공유 메모리 영역. 주로 공유 라이브러리(예: libc)가 여러 프로세스에서 공유되는 부분.
특히 SHR은 다른 프로세스와 공유되므로, 모든 프로세스의 SHR을 합치면 전체 메모리보다 커질 수 있습니다. (중복 포함)
대표적으로 shared library libc glibc
S (Process State)
프로세스 상태를 나타냅니다.
| 상태 | 의미 |
|---|---|
| R | Running (실행 중) |
| S | Sleeping (대기 상태) |
| D | I/O 대기 |
| T | 중지됨 |
| Z | Zombie |
| I | Idle kernel thread |
%CPU
프로세스가 사용한 CPU 비율
%MEM
전체 메모리 중 해당 프로세스가 사용하는 비율
TIME+
프로세스가 사용한 총 CPU 시간
TIME+ 형식 / 분:초.센티초 0:02.13 => 2.13초 동안 CPU 사용 1:30.00 => 1분 30초
COMMAND
실행 중인 프로그램 이름
systemd kworker sshd bash
⭐ top에서 자주 보이는 커널/시스템 프로세스 10개
| 프로세스 | 역할 |
|---|---|
| systemd | 시스템 관리자 |
| kworker | 커널 작업 처리 |
| ksoftirqd | 인터럽트 처리 |
| rcu | 동시성 관리 |
| migration | CPU 작업 이동 |
| kthreadd | 커널 스레드 생성 |
| kswapd | swap 관리 |
| kcompactd | 메모리 정리 |
| cpuhp | CPU hotplug 관리 |
| idle_inject | CPU idle 관리 |
systemd
리눅스 시스템의 첫 번째 프로세스 (PID 1)
# 역할 - 리눅스 전체 시스템 관리자 시스템 초기화 서비스 관리 데몬 실행 시스템 종료 관리 # 예 systemctl start sshd systemctl stop httpd
kworker
커널의 백그라운드 작업 처리 스레드 / 특정 CPU에 바인딩된 워커 스레드
kworker/1:0-events # 역할 비동기 커널 작업 처리 장치 드라이버 작업 I/O 처리 kworker/1:0처럼 숫자가 붙은 것이 바인딩된 워커 ukworker/u512처럼 u가 붙은 것은 unbound(특정 CPU에 바인딩되지 않은) 워커
ksoftirqd
소프트웨어 인터럽트 처리 스레드
ksoftirqd/0 # 역할 네트워크 패킷 처리 인터럽트 후 작업 처리 soft interrupt 처리
rcu
멀티코어 환경에서 데이터 동기화
RCU (Read Copy Update) 관리 스레드 – RCU는 리눅스 커널의 동시성 제어 기술
rcu_preempt rcu_tasks_kthread
migration
CPU 작업 이동 관리 – 프로세스를 다른 CPU 코어로 이동
CPU 간 부하 분산(load balancing)을 위해 프로세스를 이동시킨다.
migration/0 migration/1 CPU load balancing
kthreadd
PID 2
커널 스레드의 부모 프로세스로 모든 커널 스레드 생성
kswapd
메모리 관리 스레드 / 메모리 부족 시 swap 관리
RAM 부족 → 페이지 교체 → swap 사용
kcompactd
메모리 조각 정리 스레드 / 메모리 조각화 해결
큰 메모리 블록 필요 → 메모리 재배치
cpuhp
CPU Hotplug 관리 / CPU 활성화/비활성화 관리
cpuhp/0 CPU online/offline
idle_inject
CPU idle 상태 관리 / CPU 전력 관리
CPU가 유휴 상태일 때 전력 절감을 위해 idle을 주입하는 스레드
CPU idle 상태 유지



