운영체제/Linux

[Linux] top - 리눅스 CPU 사용량 보기

민돌v 2023. 8. 31. 12:01
해당 포스팅은 인프런 "리눅스 성능 분석 시작하기" 를 수강하고 정리한 글입니다 :)
  • 리눅스 기반 os 에서 돌아가는 서버 시스템의 성능 측정 및 장애 대응에 대한 학습 내용 정리 글 입니다.

 

💡 리눅스 성능 분석의 기본 명령어

명령어 역할
uptime 시스템 가동 시간, Load Average 확인
dmesg 커널 메세지 확인 (OOME 발생 여부, SYN Flooding 여부)
free 메모리 사용 현황 확인
df 디스크 여유 공간 및 inode 공간 확인
top 프로세스들의 상태, CPU 사용률, 메모리 사용률 확인
netstat 네트워크 연결 정보 확인
tcpdump 네트워크 트러블 슈팅 분석을 위한 패킷 수집 명령어

 

 


📌 top 명령어

  • 커널 혹은 쉘스크립트 환경에서 간단하게 CPU 및 메모리 사용량을 확인해 볼수 있는 명령어 → 'top'
//계속 실행하며 확인
$ top

//hot key 사용 (순서대로 입력)
$ top → 1 → d → 1

Linux 프로세스 실행 상태를 보여주는 top

전체 CPU 정보

  • 5:16 : 5시간 16분 전에 서버가 구동
  • load average
    • 현재 시스템이 얼마나 일을 하는지를 나타냅니다.
    • 3개의 숫자는 1분, 5분, 15분 간의 평균 실행/대기 중인 프로세스의 수를 표현합니다.
    • CPU 코어수 보다 적어야 합니다.
  • Tasks : 프로세스 개수
  • us : USER 를 의미하며, 프로세스의 일반적인 CPU 사용량
  • wa :watiting 을 의미하며, I/O 작업을 대기할 때의 CPU 사용량
  • KiB Mem, Swap : 각 메모리의 사용량

 

프로세스 CPU 할당 정보

  • PR : 실행 우선순위
  • VIRT, RES, SHR : 메모리 사용량
    • VIRT
      • 프로세스가 사용하고 있는 virtual memory의 전체 용량
      • 프로세스에 할당된 가상 메모리 전체 (SWAP + RES)
    • RES
      • 현재 프로세스가 사용하고 있는 물리 메모리의 양
      • 실제로 메모리에 올려서 사용하고 있는 물리 메모리 size
    • SHR
      • 다른 프로세스와 공유하고 있는 shared memory의 양
      • 예시로 라이브러리를 들 수 있음. 대부분의 리눅스 프로세스는 glibc라는 라이브러리를 참고하기에 이런 라이브러리를 공유 메모리에 올려서 사용
  • S : 프로세스 상태(작업중, I/O 대기, 유휴 상태 등)
    • D : uninterruptible sleep (I/O) - [I/O 대기 상태 == 'vmstat의 b 상태']
    • R : running (CPU)
    • S : sleeping - 작업 x
    • Z : zombie - 부모 프로세스를 잃어버린 상태, cpu나 메모리를 사용하지는 않음
      • 시스템 리소스를 사용하지는 않습니다.
      • 하지만 전체 생성가능한 프로세스 수의 총량을 잡아먹기 때문에 PID 고갈을 일으킬 수 있습니다.
        • 'sudo sysctl -a | grep -i pid_max' 로 동시에 존재가능한 프로세스 총량을 알 수 있습니다.
    • I  :  IDLE - 프로그램을 수행하지 않는 상태(프로세스가 아님)
    • T : 작업 제어 신호(Job Control Signal)에 의해 중지됨
    • t : Trace 중 디버거에 의해 중지됨

 

 

→ D, R 상태인 프로세스만 load average에 포함됩니다.

→ 좀비 프로세스 특징

  1. 시스템 리소스를 사용하지는 않습니다.
  2. 하지만 전체 생성가능한 프로세스 수의 총량을 잡아먹기 때문에 PID 고갈을 일으킬 수 있습니다.
    • 'sudo sysctl -a | grep -i pid_max' 로 동시에 존재가능한 프로세스 총량을 알 수 있습니다.

 


✔️ top

  • 시스템의 상태를 전반적으로 가장 빠르게 파악 가능한 상태를 보여주는 리눅스 명령어 (CPU, Memory, Process)
  • 옵션 없이 입력하면 interval 간격(기본 3초)으로 화면을 갱신하며 정보를 보여줍니다.
  • 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별로 사용량 보여줌
    • 메모리 용량 단위 변경
      • E를 누르면 상단에 표기되는 데이터 단위가 변경됩니다.
      • e를 누르면 하단에 표기되는 데이터 단위가 변경됩니다.
  • ps와 top의 차이점
    • ps는 ps한 시점에 proc에서 검색한 cpu 사용량
    • top은 proc에서 일정 주기로 합산해 cpu 사용율 출력

 

 


✔️ hot key 사용법

top 명령어에서는 hot key를 이용해 더 원할하게 원하는 정보를 볼 수 있습니다.

 

1) 키패드 1

  • 키패드 숫자 1을 누르면 Cpu(s) 가 각각의 CPU로 변경됩니다.
  • Cpu(s) 는 모든 cpu 사용량의 평균치를 보여주기 때문에, 혹여 cpu 불균형이 일어났을 때 확인할 수가 없으므로, hot key (1) 을 사용하여 개별적인 사용랼을 확인하는게 좋습니다.

기본모드

hot key 1

 

2) 영문자 d

  • 영문자 d를 누르면 기본 3초인 인터벌을 변경할 수 있습니다.
  • 해당 핫키를 입력하면 아래 화면 처럼 "change delay from 3.o to " 뒤에 원하는 초를 입력하면 인터벌이 변경됩니다.

 

 

 

 

 


참고