또이리의 Server Engineer

리눅스 top 명령어 본문

Linux Engineer

리눅스 top 명령어

또이리 2020. 11. 19. 21:52

리눅스 top 명령어

리눅스 top 명령어 설명

리눅스의 top 명령어에 대해서 정리해 보겠습니다.

top 명령어를 사용해서 프로세스의 정보들을 알아보겠습니다.

 

우선 top를 한번 입력하고 엔터를 쳐보겠습니다.

아래와 같은 화면이 일정 시간을 주기로 갱신되며 출력되는 것을 확인할 수 있습니다.

root@ubuntu:~# top
top - 21:16:04 up 0 min,  2 users,  load average: 0.97, 0.32, 0.11
top - 21:16:47 up 1 min,  2 users,  load average: 0.49, 0.28, 0.10
Tasks: 191 total,   1 running,  83 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   985340 total,   264968 free,   159428 used,   560944 buff/cache
KiB Swap:   969960 total,   969960 free,        0 used.   674472 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     1 root      20   0   77616   8724   6668 S   0.0  0.9   0:01.88 systemd
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd
     3 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0
     4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0H
     5 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/u256:0
     6 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 mm_percpu_wq
     7 root      20   0       0      0      0 S   0.0  0.0   0:00.06 ksoftirqd/0
     8 root      20   0       0      0      0 I   0.0  0.0   0:00.04 rcu_sched
     9 root      20   0       0      0      0 I   0.0  0.0   0:00.00 rcu_bh
    10 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 migration/0
    11 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 watchdog/0
    12 root      20   0       0      0      0 S   0.0  0.0   0:00.00 cpuhp/0
    13 root      20   0       0      0      0 S   0.0  0.0   0:00.00 cpuhp/1
    14 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 watchdog/1
    15 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 migration/1
    16 root      20   0       0      0      0 S   0.0  0.0   0:00.02 ksoftirqd/1
    17 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/1:0
    18 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/1:0H
    19 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs
    20 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 netns
    21 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_tasks_kthre
    22 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kauditd
    23 root      20   0       0      0      0 I   0.0  0.0   0:00.02 kworker/1:1
    24 root      20   0       0      0      0 I   0.0  0.0   0:00.08 kworker/0:1
    25 root      20   0       0      0      0 S   0.0  0.0   0:00.00 khungtaskd
    26 root      20   0       0      0      0 S   0.0  0.0   0:00.00 oom_reaper
    27 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 writeback
    28 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kcompactd0
    29 root      25   5       0      0      0 S   0.0  0.0   0:00.00 ksmd
    30 root      39  19       0      0      0 S   0.0  0.0   0:00.00 khugepaged
    31 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 crypto
    32 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kintegrityd
    33 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kblockd
    34 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 ata_sff
    35 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 md
    36 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 edac-poller
    37 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 devfreq_wq
    38 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 watchdogd
    39 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/u256:1
    41 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kswapd0
    42 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/u257:0
    43 root      20   0       0      0      0 S   0.0  0.0   0:00.00 ecryptfs-kthrea
    85 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kthrotld
    86 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 acpi_thermal_pm
    87 root      20   0       0      0      0 S   0.0  0.0   0:00.02 scsi_eh_0
    88 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 scsi_tmf_0
    89 root      20   0       0      0      0 S   0.0  0.0   0:00.01 scsi_eh_1
    90 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 scsi_tmf_1
    91 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/u256:2
    92 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/u256:3
    96 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 ipv6_addrconf

top

시스템의 상태를 전반적으로 가장 빠르게 파악 가능합니다.(CPU, Memory, Process)

옵션 없이 top만 입력하면 interval 간격(기본 3초)으로 화면을 갱신하며 정보를 출력하여 보여줍니다.

 

top 실행 전 옵션

순간의 정보를 확인하려면 -b 옵션(batch 모드) 화면이 갱신되지 않고, top 명령 실행 시점의 정보를 출력합니다.

-n : top 실행 주기 설정(반복 횟수) 옵션 뒤에 숫자를 붙여주면 됩니다.

 

top 실행 후 키 옵션

shift + p : CPU 사용률 내림차순 정렬

shift + m : 메모리 사용률 내림차순 정렬

shift + t : 프로세스가 작동된 시간 순

k : kill. k 입력 후 PID 번호 작성. signal은 9

f : sort field 선택 화면 -> q 누르면 RES순으로 정렬

a : 메모리 사용량에 따라 정렬

b : Batch 모드로 작동

1 : CPU Core별로 사용량 출력

 

ps와 top의 차이점

ps는 ps 한 시점 proc에서 검색한 CPU 사용률

top은 proc에서 일정 주기로 합산한 CPU 사용률

 

top -b -n 1 명령어를 입력합니다. 옵션의 의미를 알 수 있습니다.

화면이 갱신되지 않고 한 타임으로 출력이 끝이 납니다.(아래 코드 블록은 편집 한 출력 화면입니다.)

명령 프롬프트가 마지막에 보입니다.

root@ubuntu:~# top -b -n 1
top - 21:32:36 up 17 min,  2 users,  load average: 0.00, 0.01, 0.02
Tasks: 160 total,   1 running,  83 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.6 sy,  0.1 ni, 98.9 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   985340 total,   263592 free,   158480 used,   563268 buff/cache
KiB Swap:   969960 total,   969960 free,        0 used.   675284 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     1 root      20   0   77616   8724   6668 S   0.0  0.9   0:01.89 systemd
   478 root      19  -1  102992  29368  28672 S   0.0  3.0   0:00.20 systemd-journal
   496 root      20   0   97708   1756   1584 S   0.0  0.2   0:00.00 lvmetad
   502 root      20   0   48384   7128   3136 S   0.0  0.7   0:00.78 systemd-udevd
   533 systemd+  20   0  141932   3208   2680 S   0.0  0.3   0:00.02 systemd-timesyn
   538 systemd+  20   0   71852   5308   4708 S   0.0  0.5   0:00.09 systemd-network
   552 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 bond0
   574 systemd+  20   0   70768   5348   4792 S   0.0  0.5   0:00.02 systemd-resolve
   616 root      20   0   91152  10680   9208 S   0.0  1.1   0:00.02 VGAuthService
   618 root      20   0  218148   6512   5596 S   0.0  0.7   0:00.57 vmtoolsd
   621 message+  20   0   50060   4356   3740 S   0.0  0.4   0:00.02 dbus-daemon
   629 root      20   0   95540   1544   1416 S   0.0  0.2   0:00.00 lxcfs
   631 syslog    20   0  263040   4848   3552 S   0.0  0.5   0:00.02 rsyslogd
   632 root      20   0   70592   5992   5252 S   0.0  0.6   0:00.01 systemd-logind
   669 root      20   0  170392  17240   9484 S   0.0  1.7   0:00.08 networkd-dispat
   671 root      20   0  287548   6764   5888 S   0.0  0.7   0:00.03 accounts-daemon
   672 root      20   0  110548   2092   1872 S   0.0  0.2   0:00.05 irqbalance
   673 daemon    20   0   28332   2348   2140 S   0.0  0.2   0:00.00 atd
   698 root      20   0   31320   3188   2908 S   0.0  0.3   0:00.00 cron
   738 root      20   0  288884   6508   5716 S   0.0  0.7   0:00.01 polkitd
   778 root      20   0  187236  20084  12180 S   0.0  2.0   0:00.05 unattended-upgr
   939 root      20   0   72300   5696   4968 S   0.0  0.6   0:00.00 sshd
   984 root      20   0   78768   3640   3076 S   0.0  0.4   0:00.01 login
  1420 root      20   0   76620   7412   6404 S   0.0  0.8   0:00.01 systemd
  1426 root      20   0  109300   2196      4 S   0.0  0.2   0:00.00 (sd-pam)
  1446 root      20   0   22652   4896   3372 S   0.0  0.5   0:00.01 bash
  1475 root      20   0  106044   7420   6248 S   0.0  0.8   0:00.10 sshd
  1490 root      20   0  105696   6984   5996 S   0.0  0.7   0:00.01 sshd
  1646 root      20   0   13060   2200   2044 S   0.0  0.2   0:00.00 sftp-server
  1652 root      20   0   22652   5012   3428 S   0.0  0.5   0:00.05 bash
  1779 root      20   0       0      0      0 I   0.0  0.0   0:00.51 kworker/u256:0
  1796 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0
  1814 root      20   0   44108   3996   3424 R   0.0  0.4   0:00.00 top
root@ubuntu:~#

 

상단의 시간 - 현재시간 up 17 min 현재 시간과 서버가 작동된 시간 17분

 

load average - 현재 시스템이 얼마나 일을 하는지를 나타냅니다.

3개의 숫자는 1분, 5분, 15분 간의 평균 실행/대기 중인 프로세스의 수. CPU 코어수 보다 적으면 문제없습니다.

 

Tasks - 프로세스 개수를 나타냅니다.

KiB Mem, Swap - 각 메모리의 사용량을 보여줍니다.

PR - 실행 우선순위를 나타냅니다.

 

VIRT, RES, SHR - 메모리 사용량 => 메모리 누수를 check 가능합니다.

S - 프로세스 상태(작업 중, I/O 대기, 유휴 상태 등)

 

VIRT, RES, SHR

현재 프로세스가 사용하고 있는 메모리

 

VIRT

프로세스가 사용하고 있는 virtual memory의 전체 용량

프로세스에 할당된 가상 메모리 전체

SWAP + RES

 

RES

현재 프로세스가 사용하고 있는 물리 메모리의 양

실제로 메모리에 올려서 사용하고 있는 물리 메모리

실제로 메모리를 쓰고 있는 RES가 핵심

 

SHR

다른 프로세스와 공유하고 있는 shared memory의 양

예로 라이브러리를 들 수 있습니다.

대부분의 리눅스 프로세스는 glibc라는 라이브러리를 참고하기 때문에 이런 라이브러리를 공유 메모리에 올려서 사용합니다.

 

Memory Commit

프로세스가 커널에게 필요한 메모리를 요청하면 커널은 프로세스에 메모리 영역을 주고 실제로 할당은 하지 않지만 해당 영역을 프로세스에게 주었다는 것을 저장해놓습니다.

이런 과정을 Memory commit이라 부릅니다.

 

프로세스 상태

SHR 옆에 있는 S 항목으로 볼 수 있습니다.

D : Uninterruptiable sleep. 디스크 혹은 네트워크 I/O를 대기

R : 실행 중(CPU 자원을 소모)

S : Sleeping 상태, 요청한 리소스를 즉시 사용 가능

T : Traced or Stopped. 보통의 시스템에서 자주 볼 수 없는 상태

Z : zombie. 부모 프로세스가 죽은 자식 프로세스

ubuntu top

Comments