Skip to content

Latest commit

 

History

History
71 lines (59 loc) · 4.26 KB

top.md

File metadata and controls

71 lines (59 loc) · 4.26 KB
  • top 명령어를 사용하면 시스템의 상태를 전반적으로 가장 빠르게 파악할 수 있다. (CPU, Memory, Process)
  • 옵션 없이 입력하면 interval 간격(기본 3초)으로 화면을 갱신하며 정보를 보여준다.
$ top -help
  procps-ng 3.3.17
Usage:
  top -hv | -bcEeHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]
top - 21:22:27 up 232 days,  2:22,  3 users,  load average: 0.00, 0.04, 0.05
Tasks: 134 total,   1 running, 133 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.8 us,  0.5 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem:   3712.0 total,    181.8 free,   2010.1 used,   1520.0 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1419.4 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                 
      1 root      20   0  174752  12136   8484 S   0.3   0.3 516:12.38 systemd                                                 
   2402 root      20   0 1498416  25636   7104 S   0.3   0.7 741:07.27 containerd                                              
 705636 ubuntu    20   0   10892   3840   3144 R   0.3   0.1   0:00.01 top                                                     
1677876 root      20   0  712200   6344   3292 S   0.3   0.2  26:35.67 containerd-shim                                         
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.83 kthreadd                                                
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                                  
...        
  • load average: 현재 시스템이 얼마나 일을 하는지를 나타냄. 3개의 숫자는 1분, 5분, 15분 간의 평균 실행/대기 중인 프로세스의 수. CPU 코어수 보다 적으면 문제 없음

  • Tasks: 프로세스 개수

  • KiB Mem, Swap: 각 메모리의 사용량

  • PR: 실행 우선순위

  • VIRT, RES, SHR: 메모리 사용량 => 누수 check 가능

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

  • VIRT

    • 프로세스가 사용하고 있는 virtual memory의 전체 용량
    • 프로세스에 할당된 가상 메모리 전체
    • SWAP + RES
  • RES

    • 현재 프로세스가 사용하고 있는 물리 메모리의 양
    • 실제로 메모리에 올려서 사용하고 있는 물리 메모리
    • 실제로 메모리를 쓰고 있는 RES가 핵심!
  • SHR

    • 다른 프로세스와 공유하고 있는 shared memory의 양
    • 예시로 라이브러리를 들 수 있음. 대부분의 리눅스 프로세스는 glibc라는 라이브러리를 참고하기에 이런 라이브러리를 공유 메모리에 올려서 사용

top 실행 후 명령어

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

  • shit + 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 사용량을 출력한다.

Memory Commit

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

  • 이런 과정을 Memory commit이라 부른다.

  • 왜 커널은 프로세스의 메모리 요청에 따라 즉시 할당하지 않고 Memory Commit과 같은 기술을 사용해 요청을 지연시킬까?

    • fork()와 같은 새로운 프로세스를 만들기 위한 콜을 처리해야 하기 때문이다.
    • fork() 시스템 콜을 사용하면 커널은 실행중인 프로세스와 똑같은 프로세스를 하나 더 만들고, exec() 시스템 콜을 통해 다른 프로세스로 변한다.
    • 이 때 확보한 메모리가 쓸모 없어질 수 있으므로, COW(Copy-On-Write) 기법을 통해 복사된 메모리 영역에 실제 쓰기 작업이 발생한 후 실질적인 메모리 할당을 진행