top 명령어 핵심 정리 - Linux top

🔥 가장 많이 쓰는 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 포커스 모드 진입
plaintext
단축키 도움말
# 원문
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' 또는 '?' 키를 누르십시오.

예시 (기본)

bash
[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️⃣ 시스템 전체 상태

bash
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

bash
0.05, 0.05, 0.02

각 의미

값 의미
첫번째 1분 평균 부하
두번째 5분 평균 부하
세번째 15분 평균 부하

👉 Load Average 의미

CPU가 처리해야 할 대기 작업 수

plaintext
CPU 실행중 프로세스
CPU 실행 대기 프로세스
Disk I/O 대기 프로세스

예시

CPU 코어 정상 load
1 core 1.0
4 core 4.0

지금 값

bash
0.05
➡ 거의 아무 작업도 없는 상태 👍

2️⃣ 프로세스 상태

bash
Tasks: 269 total,   1 running, 268 sleeping,   0 stopped,   0 zombie
항목 의미
total 전체 프로세스 수
running 실행 중
sleeping 대기 상태
stopped 중지된 프로세스
zombie 좀비 프로세스

현재 상태

상태 값
전체 프로세스 269
실행 중 1
대기 268
좀비 0

👉 대부분 시스템 프로세스는 sleep 상태입니다.


3️⃣ CPU 사용률

bash
%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 뺏긴 시간

현재 상태

bash
100% idle
➡ CPU 완전 여유 상태

멀티코어 환경에서 100%를 초과할 수 있음 (예: 4코어면 최대 400%)


4️⃣ 메모리 정보

bash
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 메모리가 적어도 실제로는 여유가 많을 수 있다.

plaintext
예를 들어
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은 디스크를 사용하기 때문에 매우 느립니다.

bash
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)

bash
   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)

프로세스의 고유 번호입니다.

plaintext
# 리눅스에서 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)나 스왑을 사용하지 않더라도, 주소 공간만 확보한 경우도 포함.

plaintext
RAM
Swap
Shared library
Mapped file

#즉, 프로세스가 접근 가능한 전체 메모리 공간

RES (Resident Memory)

실제 물리 메모리에 상주하는 크기. (프로세스가 현재 사용 중인 RAM)

plaintext
실제 물리 메모리 사용량

systemd
RES = 40952 KB (약 40MB RAM 사용)

SHR (Shared Memory)

공유 메모리 영역. 주로 공유 라이브러리(예: libc)가 여러 프로세스에서 공유되는 부분.

특히 SHR은 다른 프로세스와 공유되므로, 모든 프로세스의 SHR을 합치면 전체 메모리보다 커질 수 있습니다. (중복 포함)

plaintext
대표적으로 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 시간

plaintext
TIME+ 형식 / 분:초.센티초

0:02.13 => 2.13초 동안 CPU 사용
1:30.00 => 1분 30초

COMMAND

실행 중인 프로그램 이름

plaintext
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)

plaintext
# 역할 - 리눅스 전체 시스템 관리자
시스템 초기화
서비스 관리
데몬 실행
시스템 종료 관리

# 예
systemctl start sshd
systemctl stop httpd

kworker

커널의 백그라운드 작업 처리 스레드 / 특정 CPU에 바인딩된 워커 스레드

plaintext
kworker/1:0-events

# 역할
비동기 커널 작업 처리
장치 드라이버 작업
I/O 처리

kworker/1:0처럼 숫자가 붙은 것이 바인딩된 워커
ukworker/u512처럼 u가 붙은 것은 unbound(특정 CPU에 바인딩되지 않은) 워커

ksoftirqd

소프트웨어 인터럽트 처리 스레드

plaintext
ksoftirqd/0

# 역할
네트워크 패킷 처리
인터럽트 후 작업 처리
soft interrupt 처리

rcu

멀티코어 환경에서 데이터 동기화

RCU (Read Copy Update) 관리 스레드 - RCU는 리눅스 커널의 동시성 제어 기술

plaintext
rcu_preempt
rcu_tasks_kthread

migration

CPU 작업 이동 관리 - 프로세스를 다른 CPU 코어로 이동

CPU 간 부하 분산(load balancing)을 위해 프로세스를 이동시킨다.

plaintext
migration/0
migration/1

CPU load balancing

kthreadd

PID 2

커널 스레드의 부모 프로세스로 모든 커널 스레드 생성

kswapd

메모리 관리 스레드 / 메모리 부족 시 swap 관리

plaintext
RAM 부족
→ 페이지 교체
→ swap 사용

kcompactd

메모리 조각 정리 스레드 / 메모리 조각화 해결

plaintext
큰 메모리 블록 필요
→ 메모리 재배치

cpuhp

CPU Hotplug 관리 / CPU 활성화/비활성화 관리

plaintext
cpuhp/0

CPU online/offline

idle_inject

CPU idle 상태 관리 / CPU 전력 관리

CPU가 유휴 상태일 때 전력 절감을 위해 idle을 주입하는 스레드

plaintext
CPU idle 상태 유지