top command

3 분 소요

linux의 top 명령을 통해 실시간 수행중인 프로세스들에 대한 정보를 볼 수 있습니다.

top 자체 명령어가 많기 때문에 Man page를 이용하면 좋습니다.

$> top
top - 15:01:58 up 3 days, 51 min,  1 user,  load average: 0.32, 0.21, 0.15
Tasks: 370 total,   1 running, 298 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.6 us,  1.0 sy,  0.0 ni, 97.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 16309896 total,  5783464 free,  5049060 used,  5477372 buff/cache
KiB Swap: 16658428 total, 16234492 free,   423936 used. 10597528 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
15846 geeksaga  20   0 8653140 2.064g 115348 S   7.6 13.3  19:31.57 java
 1840 root      20   0  524728  57744  40812 S   3.6  0.4 261:11.12 Xorg
 3786 geeksga   20   0  545492  42624  15772 S   2.3  0.3   4:47.24 gnome-terminal-
 1394 root      20   0    4396   1260   1228 S   0.7  0.0   1:13.78 acpid
 1933 root     -51   0       0      0      0 S   0.7  0.0  50:49.49 irq/33-nvidia
 3816 geeksaga  20   0  121736  20556   6540 S   0.7  0.1   0:04.53 nvim
17283 geeksaga  20   0   43364   4120   3240 S   0.7  0.0   0:04.90 top
...

위에 출력된 내용은 부분별로 다음 정보를 의미 합니다.

UPTIME & LOAD Averages

  • top - 15:01:58 up 3 days, 51 min, 1 user, load average: 0.32, 0.21, 0.15
    • uptime 부분에서 설명한 내용과 동일합니다.

TASK & CPU States

  • Tasks: 370 total, 1 running, 298 sleeping, 0 stopped, 0 zombie
    • 전체 실행 중인 프로세스 개수를 total, running, sleeping, stopped, zombie로 구분하여 보여줍니다.
  • %Cpu(s): 1.6 us, 1.0 sy, 0.0 ni, 97.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    • us, user : un-niced가 아닌 user 프로세스 사용률
    • sy, system : 시스템(kernel)이 프로세스 사용률
    • ni, nice : niced user 프로세스 사용률
    • id, idle : 시스템(kernel)이 일하지 않는 시간 비율
    • wa, IO-wait : I/O를 기다리는 비율
    • hi, Hard Interrupt : 하드웨어 인터럽트에 소요된 시간 비율
    • si, Soft Interrupt : 소프트웨어 인터럽트에 소요 시간 비율
    • st, Steal Time : 가상화 시스템에서 실제 CPU를 할당받기 위해 기다리는 시간 비율

MEMORY Usage

  • KiB Mem : 16309896 total, 2533064 free, 6246652 used, 7530180 buff/cache
    • 물리 메모리의 total, free, used, buff/cache를 나타낸다.
  • KiB Swap: 16658428 total, 16244476 free, 413952 used. 9316720 avail Mem
    • 가강 메모리의 total, free, used, avail Mem(물리 메모리)를 나타낸다.

FIELDS / Columns

  • PID -- Process ID : 프로세스 아이디
  • USER : 프로세스를 실행시킨 사용자 아이디
  • PR -- Priority : 프로세스 우선순위
  • NI -- Nice : Nice 값을 나타내며, 음수를 가지는 값이 우선순위가 높다.
  • VIRT -- Virtual Memory Size (KiB) : 프로세스가 사용하고 있는 전체 가상 메모리 사용량
  • RES -- Resident Memory Size (KiB) : 스왑되지 않고 프로세스가 실제 사용중인 물리 메모리
  • SHR -- Shared Memory Size (KiB) : 다른 프로세스와 공유할 수 있는 메모리의 크기를 나타낸다.
  • S -- Process Status : 프로세스 상태
    • D = uninterruptible sleep(I/O 작업을 위한 대기 상태)
    • R = running(CPU 자원을 사용중)
    • S = sleeping
    • T = stopped by job control signal
    • t = stopped by debugger during trace
    • Z = zombie(부모 프로세스가 죽은 자식 프로세스)
  • %CPU -- CPU Usage : 프로세스가 사용하는 CPU의 사용률
  • %MEM -- Memory Usage (RES) : 프로세스가 사용하는 메모리 사용률
  • TIME+ -- CPU Time, bundredths : 프로세스가 시작된 이후 경과된 시간
  • COMMAND -- Command Name or Command Line : 실행된 명령어

유용한 옵션들

  • -i : idle 또는 zombie 프로세스를 제외하고 프로세스 목록을 보여 줍니다.
  • -u user_name : 사용자 명을 입력하면 프로세스를 실행 시킨 사용자 목록만 볼 수 있습니다.
  • -p : PIDs를 입력하여 해당 프로세스에 대해서만 볼 수 있습니다.(PID 목록은 ,로 구분 합니다.)
    • ex) top -p 15846,1840,1933
    • ex) top -p $(pgrep -d ‘,’ process_name)
  • -b : Batch-mode로 동작합니다.
  • -n : top 명령어가 반복된 횟수를 설정 합니다.

top 실행 후 명령어들

  • 1 : Cpu States를 Core 별로 보여 준다.
  • k : 프로세스를 kill 한다. PID를 입력하면 signal을 전송한다.
  • f : 화면에 표시될 프로세스 관련 컬럼 설정을 할 수 있다.
  • z : 색상 변경
  • c : Command 옵션 값 표시
  • q : top 프로그램 종료
  • d [sec] : 설정된 단위로 딜레이 설정(화면 Refresh)
  • ‘shift + n’ : PID 컬럼으로 내림차순
  • ‘shift + p’ : %CPU 컬럼으로 내림차순
  • ‘shift + m’ : %MEM 컬럼으로 내림차순
  • ‘shift + t’ : TIME+ 컬럼으로 내림차순
  • ‘shift + r’ : 정렬 기준을 반대로 변경(내림차순을 오름차순, 오름차순을 내림차순)

help top

$> top -h 
  procps-ng version 3.3.10
Usage:
  top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

tldr top

$> tldr top

  top

  Display dynamic real-time information about running processes.

  - Start top:
    top

  - Do not show any idle or zombie processes:
    top -i

  - Show only processes owned by given user:
    top -u user_name

  - Show only the processes with the given PID(s), passed as a comma-separated list. (Normally you wouldn't know PIDs off hand. This example picks the PIDs from the process name):
    top -p $(pgrep -d ',' process_name)

  - Get help about interactive commands:
    ?

참고 링크