리눅스 CPU 사용률 확인하는 3가지 방법
리눅스 서버에서 CPU 사용률을 확인하는 방법은 여러 가지가 있습니다.
이번 글에서는 top, vmstat, mpstat 명령어를 사용하여 CPU 사용률을 확인하는 방법에 대해 알아보겠습니다.
top 명령어로 CPU 사용률 확인하기
top
명령어는 리눅스에서 시스템의 상태를 실시간으로 모니터링하는 데 사용되는 명령어입니다. 이를 통해 CPU 사용률을 확인할 수 있습니다.
다음은 top
명령어를 이용하여 CPU 사용률을 확인하는 방법입니다:
top -bn1 | grep "Cpu(s)" | awk '{printf("CPU 사용률 : %.1f%%\n", 100 - $8)}'
실행 결과
CPU usage : 25.9%
다음은 top
명령어를 이용하여 CPU의 유휴 상태(idle)을 확인하는 방법입니다:
top -bn1 | grep "Cpu(s)" | awk '{printf("CPU idle : %.1f%%\n", $8)}'
실행 결과
CPU idle : 74.1%
위 2개의 top
명령어는 다음과 같이 동작합니다.
top -bn1
: top 명령어를 한 번만 실행하고 결과를 출력합니다.grep "Cpu(s)"
: 출력된 결과에서 "%Cpu(s)"라는 문자열로 시작하는 줄을 찾습니다.awk '{printf("CPU usage : %.1f%%\n", 100 - $8)}'
: 찾은 줄에서 CPU의 유휴 상태(idle) 비율을 추출하고, 이를 이용해 CPU 사용률을 계산한 후, "CPU usage : %" 형식으로 출력합니다.awk '{printf("CPU idle : %.1f%%\n", $8)}'
: 찾은 줄에서 CPU의 유휴 상태(idle) 비율을 추출하고, 이를 이용해 CPU 사용률을 계산한 후, "CPU idle : %" 형식으로 출력합니다.
top
명령어의 CPU 항목을 아래 예제로 자세히 알아보겠습니다.
top -bn1 | grep Cpu
실행 결과
%Cpu(s): 24.4 us, 0.7 sy, 0.0 ni, 74.1 id, 0.7 wa, 0.0 hi, 0.0 si, 0.0 st
각 항목은 다음을 의미합니다.
us
: 사용자 프로세스가 사용한 CPU 시간의 비율입니다. 이 값이 높으면 사용자 프로세스가 많은 CPU를 사용하고 있다는 것을 의미합니다.sy
: 시스템 프로세스가 사용한 CPU 시간의 비율입니다. 이 값이 높으면 커널이 많은 CPU를 사용하고 있다는 것을 의미합니다.ni
: nice 값이 변경된 사용자 프로세스가 사용한 CPU 시간의 비율입니다.id
: 유휴 상태의 CPU 시간의 비율입니다. 이 값이 높으면 CPU가 많이 유휴 상태에 있다는 것을 의미합니다.wa
: I/O 대기 중인 CPU 시간의 비율입니다. 이 값이 높으면 디스크 I/O에 의해 CPU가 대기 상태에 있다는 것을 의미합니다.hi
: 하드웨어 인터럽트에 의해 사용된 CPU 시간의 비율입니다.si
: 소프트웨어 인터럽트에 의해 사용된 CPU 시간의 비율입니다.st
: 가상 환경에서 다른 가상 머신에 의해 도난당한 CPU 시간의 비율입니다.
사용자 프로세스가 24.4%, 시스템 프로세스가 0.7%, 유휴 상태가 74.1%, I/O 대기 상태가 0.7%를 차지하고 있음을 알 수 있습니다. 나머지 항목들은 모두 0.0%로, 해당 시점에서는 활동하지 않았음을 나타냅니다.
vmstat 명령어로 CPU 사용률 확인하기
vmstat
명령어는 시스템의 전반적인 상태를 보여주는 명령어로, CPU 사용률 뿐만 아니라 메모리, 디스크 I/O, 프로세스 등에 대한 정보도 제공합니다.
다음은 vmstat
명령어를 이용하여 CPU 사용률을 확인하는 방법입니다:
1초 마다 모니터링 결과를 확인하고 싶을 때 vmstat 1
명령어를 사용하면 됩니다. 멈추고 싶을 땐 Ctrl
+c
키를 눌러서 종료하면 됩니다.
vmstat 1
실행 결과
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 7 0 1345280 1280772 448484 7491884 0 0 11 17 0 0 3 1 96 0 0 7 0 1345280 1296116 448508 7501444 0 0 4 608 19183 27128 31 3 66 0 0 9 0 1345280 1272352 448716 7505652 0 0 1752 19240 24538 35987 34 4 59 3 0 5 0 1345280 1236444 448716 7507272 0 0 16 256 23013 40882 42 4 53 0 0 5 0 1345280 1224224 448716 7508236 0 0 0 312 18501 24111 34 2 65 0 0 ^C
vmstat
명령 실행 후 열의 내용이 좁아서 넓게 보고 싶을 때는 -w
옵션을 같이 사용하면 됩니다.
vmstat
명령어의 출력 내용의 상세 내용은 아래와 같습니다.
- procs : 프로세스에 관한 정보입니다.
r
: 실행 대기 중인 프로세스 수입니다. 즉, CPU가 처리할 작업을 기다리고 있는 프로세스의 수를 나타냅니다.b
: 중단되지 않은 수면 상태에 있는 프로세스 수입니다. 이 프로세스들은 어떤 이유로 인해 일시적으로 멈춰있습니다.
- memory : 메모리에 관한 정보입니다.
swpd
: 사용 중인 가상 메모리의 양입니다. 가상 메모리는 실제 물리적 메모리가 부족할 때 디스크 공간을 메모리처럼 사용하는 기술입니다.free
: 사용 가능한 메모리의 양입니다. 이는 아직 사용되지 않고 남아있는 메모리를 나타냅니다.buff
: 버퍼로 사용된 메모리의 양입니다. 버퍼는 데이터를 임시로 저장하는 영역으로, 입출력 작업의 효율을 높이기 위해 사용됩니다.cache
: 캐시로 사용된 메모리의 양입니다. 캐시는 자주 사용되는 데이터를 빠르게 접근하기 위해 사용하는 메모리 영역입니다.
- swap : 스왑 공간에 관한 정보입니다.
si
: 디스크에서 스왑인된 메모리의 양입니다. 스왑인은 가상 메모리에서 물리적 메모리로 데이터를 옮기는 작업을 의미합니다.so
: 디스크로 스왑아웃된 메모리의 양입니다. 스왑아웃은 물리적 메모리에서 가상 메모리로 데이터를 옮기는 작업을 의미합니다.
- io : 입출력에 관한 정보입니다.
bi
: 블록 장치에서 읽은 블록 수입니다. 즉, 디스크에서 시스템으로 데이터를 읽어오는 작업을 나타냅니다.bo
: 블록 장치로 쓴 블록 수입니다. 시스템에서 디스크로 데이터를 쓰는 작업을 나타냅니다.
- system : 시스템에 관한 정보입니다.
in
: 초당 인터럽트 수, 클럭 포함입니다. 인터럽트는 CPU에게 어떤 사건이 발생했음을 알려주는 신호입니다.cs
: 초당 컨텍스트 스위치 수입니다. 컨텍스트 스위치는 한 작업에서 다른 작업으로 CPU의 제어권을 넘기는 것을 의미합니다.
- cpu : CPU에 관한 정보입니다. 이 값들은 전체 CPU 시간의 비율을 나타냅니다.
us
: 비 커널 코드를 실행하는 데 사용된 시간 (사용자 시간, nice 시간 포함)을 나타냅니다.sy
: 커널 코드를 실행하는 데 사용된 시간 (시스템 시간)을 나타냅니다.id
: 유휴 상태에 있는 시간을 나타냅니다. 이는 CPU가 아무런 작업도 하지 않고 대기하고 있는 시간을 의미합니다.
mpstat 명령어로 CPU 사용률 확인하기
mpstat
명령어는 각각의 CPU 코어에 대한 세부적인 정보를 제공하는 명령어로, 멀티코어 시스템에서 유용하게 사용됩니다.
다음은 mpstat
명령어를 이용하여 CPU 사용률을 확인하는 방법입니다. CPU 코어가 2개인 서버에서 아래와 같은 결과를 확인할 수 있습니다.
mpstat -P ALL
실행 결과
Linux 5.14.0-284.25.1.el9_2.x86_64 (rockylinux9-Template) 09/25/2023 _x86_64_ (2 CPU) 02:36:21 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 02:36:21 PM all 0.03 0.01 0.04 0.01 0.02 0.02 0.00 0.00 0.00 99.87 02:36:21 PM 0 0.03 0.01 0.04 0.01 0.03 0.03 0.00 0.00 0.00 99.86 02:36:21 PM 1 0.04 0.01 0.04 0.01 0.02 0.01 0.00 0.00 0.00 99.87
위의 예제에서, 각 CPU 코어(CPU
컬럼)에 대한 사용자 모드(%usr
), 시스템 모드(%sys
), I/O 대기(%iowait
), 유휴 상태(%idle
) 등의 CPU 사용률을 확인할 수 있습니다.
마치며
리눅스 서버에서 CPU 사용률을 확인하는 3가지 방법에 대해 알아보았습니다.
이 글에서 살펴본 top
, vmstat
, mpstat
명령어 외에도 pidstat
, sar
등 다양한 방법이 있습니다.
이처럼 리눅스 시스템에서는 다양한 명령어를 통해 CPU 사용률을 확인할 수 있습니다. 각 명령어는 제공하는 정보와 사용 방법에 차이가 있으므로, 상황에 맞게 적절한 명령어를 선택하여 사용하면 됩니다.
- 블로그 : www.infracody.com
이 글이 유익했나요? 댓글로 소중한 의견을 남겨주시거나 커피 한 잔의 선물은 큰 힘이 됩니다.