[linux] 리눅스 CPU 사용량 확인 - top 커맨드 사용 방법

리눅스OS에서 리소스 점유율, 그중에서 특히 CPU 사용률을 확인하는 방법은 여러가지가 있습니다.

콘솔 환경에 대응하는 미려한 그래픽을 가진 여러가지 리소스 사용 모니터링 툴이 있지만 배포한에 상관없이 사용할 수 있는 top 이 가장 기본적이고 주로 사용합니다.

더 좋은 UI 화면을 보여주는 툴은 더 많은 메모리를 사용하고, 조금이나마 더 시스템에 부하를 줍니다. 저사양 서버 환경에서는 이런 것도 서비스 성능에 영향을 줄 수 있습니다.

별도로 설치해야 하는 htop
별도로 설치해야 하는 htop

top 커맨드로 리소스 사용 상태를 모니터링하면 현재 서버의 상태가 어떤지 한눈에 파악할 수 있습니다.

리소스 모니터링을 하려면 콘솔창에 top 커맨드만 입력하면 됩니다.

top 리소스 모니터링 화면은 기본 설정으로 3초마다 업데이트가 됩니다. 업데이트할 때마다 시스템 리소스 사용량이 갱신되면서 현재 시스템의 상태를 표시합니다.

업데이트 주기를 조정하려면 실행할 때 옵션을 설정하면 됩니다. top을 실행할 때 사용할 수 있는 옵션은 다음과 같습니다.

  • -n : 뒤에 숫자를 표시해서 모니터링하는 회수를 지정합니다. 표시한 숫자만큼 모니터링 갱신 주기를 갱신한 후 top를 종료합니다.
  • -p : 뒤에 프로세스 ID를 표시해서 특정 프로세스에 대한 모니터링 내용만 출력합니다. 특정 프로그램의 부하만을 측정할 때 사용합니다.
  • -b : 배치모드로 실행됩니다. 사용자가 콘솔 화면에서 리소스 통계를 모니터링하는 것을 전제로 하는 기본 출력 포맷과 달리, 화면에서 모니터링하는 것을 고려하지 않습니다. 모든 프로세스 목록이 출력되며, 화면 포매팅을 위한 이스케이핑도 하지 않습니다. 주로 파일에 저장해서 통계 데이터를 분석하기 위한 용도로 사용합니다.

top 모니터링 화면을 종료하려면 키보드 "Q"를 누르면 됩니다.(또는 강제로 종료하는 "Ctrl+C"를 누르면 됩니다.)

top 모니터링 화면은 크게 두 개의 섹션으로 구분되어 있습니다. 상단에는 리소스의 사용량을 보여주는 현재 통계 값이 표시되고, 하단에는 현재 시스템에서 실행중인 프로세스 테이블이 표시됩니다.

모니터링에 사용하는 기본 커맨드들은 다음과 같습니다.

  • shift + b : 상단 통계정보의 값을 강조
  • spacebar : 화면 갱신
  • z : 출력 텍스트 색상 변경
  • d : 화면 갱신 주기를 입력해서 변경(초 단위)
  • q : top 모니터링 종료.
  • k : 프로세스ID로 프로세스 시그널 전송. 프로세스ID를 입력하면 전송할 메시지 코드를 입력하라고 추가 입력 프롬프트("Send pid xxx signal [15/sigterm] ")가 표시됩니다. 9를 입력하면 프로세스를 종료합니다.

상단 통계 정보

  • 첫 행에 보이는 것은 가동시간과 평균 로드율입니다.
    • 가동시간 : 부팅 후 사용한 시간. 재부팅하면 초기화 됨.
    • 사용자 수 : 시스템에 로그인한 ID 개수. 중복 로그인 아이디도 카운트 됩니다.
    • 평균 로드율: 단위 시간별로 평균 CPU 로드 평균 값을 표시합니다. 순서대로 1분, 5분, 1시간의 평균 CPU 로드율입니다.
      CPU의 코어가 1개이면 최대 값은 1이 됩니다. 4코어 CPU면 최대값은 4가 됩니다.
  • 두 번째 행에는 현재 실행중인 테스트의 종류별 개수를 표시합니다.
  • 세 번째 행에는 CPU 점유율이 종류와 상태별로 표시됩니다.
  • 네 번째 행에는 물리 메모리 사용량이 표시됩니다.
  • 다섯 번째 행에는 스왑 메모리 사용량 정보가 표시됩니다.

모드 전환

화면에 표시하는 통계 정보를 변경할 수 있는 키보드 커맨드는 다음과 같습니다.

  • m : 메모리 사용량 미표시 -> 상세정보 표시 -> 그래프 타입1 요약 표시 -> 그래프 타입 2 요약 표시를 순서대로 전환합니다.
  • 1 : CPU의 개별 코어 별로 코어 로드를 상세 표시합니다.

ps와 top의 CPU 점유율 정보 차이

ps는 ps 커맨드를 실행한 시점의 순간 CPU 사용량을 표시합니다. 반면 top에서 표시하는 CPU 사용량은 일정 시간동안 측정한 CPU 사용량의 평균값입니다.

프로세스 정보 목록

프로세스 정보 테이블에 표시되는 정보는 PID, USER, PR, NI, VIRT, RES, SHR, S, %CPU, %MEM, TIME+, COMMAND 12개이며, 각 항목이 나타내는 값은 다음과 같습니다.

  • PID : 프로세스 ID (PID)
  • USER : 프로세스를 실행한 사용자 ID
  • PR : 프로세스의 우선순위 (priority). 우선순위가 높으면 리눅스 커널이 작업을 예약할 때 CPU 자원 사용에 우선 순서를 받게 됨. 우선 순위 값은 0 ~ 139까지이며, 0 ~ 99는 실시간 프로세스, 100 ~ 139는 사용자 프로세스에 사용합니다.
  • NI : 사용자가 커맨드를 실행할 때 지정할 수 있는 우선 순위 지정 값입니다. NIce value의 줄임말입니다. -20 ~ 19까지의 값을 가지며, -20이 우선순위가 가장 높습니다. 마이너스 값으로 갈 수록 우선순위가 높습니다. PRI = NI + 20이 됩니다.
    같은 프로그램을 병렬로 실행할 때 프로그램 사이의 우선 순위를 NI 값으로 지정할 수 있습니다.
  • VIRT : 사용하는 가상 메모리의 전체 크기(SWAP+RES). 실제 할당한 메모리 용량과는 다름.
  • RES : 프로세스가 사용하는 물리 메모리 사용량. 물리 메모리 사용량이 높은 프로세스는 RES 값으로 구분.
  • SHR : VIRT 메모리 중 다른 프로세스와 공유해서 사용하고 있는 메모리의 크기. 프로세스가 사용하는 라이브러리 같은 코드는 메모리에 한번만 적재되고 여러 프로세스에서 공유해서 사용하게 됨.
  • S : 프로세스의 상태표시. S(sleeping), R(running), W(swapped out process), Z(zombies) 중 한가지 상태를 가짐.
  • %CPU : 프로세스가 사용하는 CPU 사용율
  • %MEM : 프로세스가 사용하는 메모리 사용율
  • TIME+ : 프로세스가시작된 이후 경과한 총 시간
  • COMMAND : 실행 명령어/프로그램

프로세스 목록 정렬 커맨드

  • shift + p : CPU 사용률 내림차순
  • shift + m : 물리 메모리(RES) 사용량 내림차순
  • shift + t : 프로세스 실행 후 경과 시간 내림차순