>  기사  >  운영 및 유지보수  >  Linux에서 특정 CPU 사용량을 계산하는 방법

Linux에서 특정 CPU 사용량을 계산하는 방법

coldplay.xixi
coldplay.xixi원래의
2020-08-22 11:26:393610검색

Linux에서 특정 CPU 사용량을 계산하는 방법: 먼저 [/proc/stat]에서 시간 t1의 시스템 전체 값을 얻은 다음 [/proc/stat]에서 시간 t2의 시스템 전체 값을 얻습니다. 마지막으로 t2와 t1 사이의 시스템 총 CPU 사용량을 계산합니다.

Linux에서 특정 CPU 사용량을 계산하는 방법

관련 학습 권장사항: linux 비디오 튜토리얼

Linux에서 특정 CPU 사용량을 계산하는 방법:

1. /proc/stat의 배경 지식

아래와 같이 각 CPU의 사용량을 확인할 수 있습니다.

Linux에서 특정 CPU 사용량을 계산하는 방법

cpu 뒤의 10개 숫자(0/1/2/…)는 다음과 같습니다.

/proc/stat
kernel/system statistics.  Varies with architecture.  
Common entries include:
     user nice system idle iowait  irq  softirq steal guest guest_nice
cpu  4705 356  584    3699   23    23     0       0     0        0
cpu0 1393280 32966 572056 13343292 6130 0 17875 0 23933 0
   The amount of time, measured in units of USER_HZ
   (1/100ths of a second on most architectures, use
   sysconf(_SC_CLK_TCK) to obtain the right value), that
   the system ("cpu" line) or the specific CPU ("cpuN"
   line) spent in various states:
   user   (1) Time spent in user mode.
   nice   (2) Time spent in user mode with low priority
          (nice).
   system (3) Time spent in system mode.
   idle   (4) Time spent in the idle task.  This value
          should be USER_HZ times the second entry in the
          /proc/uptime pseudo-file.
   iowait (since Linux 2.5.41)
          (5) Time waiting for I/O to complete.  This
          value is not reliable, for the following rea‐
          sons:
          1. The CPU will not wait for I/O to complete;
             iowait is the time that a task is waiting for
             I/O to complete.  When a CPU goes into idle
             state for outstanding task I/O, another task
             will be scheduled on this CPU.
          2. On a multi-core CPU, the task waiting for I/O
             to complete is not running on any CPU, so the
             iowait of each CPU is difficult to calculate.
          3. The value in this field may decrease in cer‐
             tain conditions.
   irq (since Linux 2.6.0-test4)
          (6) Time servicing interrupts.
   softirq (since Linux 2.6.0-test4)
          (7) Time servicing softirqs.
   steal (since Linux 2.6.11)
          (8) Stolen time, which is the time spent in
          other operating systems when running in a virtu‐
          alized environment
   guest (since Linux 2.6.24)
          (9) Time spent running a virtual CPU for guest
          operating systems under the control of the Linux
          kernel.
   guest_nice (since Linux 2.6.33)
          (10) Time spent running a niced guest (virtual
          CPU for guest operating systems under the con‐
          trol of the Linux kernel).

2 특정 CPU 사용량을 계산합니다.

위의 배경 지식을 바탕으로 특정 CPU 사용량을 계산할 수 있습니다. 구체적인 계산 방법은 다음과 같습니다.

Total CPU time since boot = user+nice+system+idle+iowait+irq+softirq+steal
Total CPU Idle time since boot = idle + iowait
Total CPU usage time since boot = Total CPU time since boot - Total CPU Idle time since boot
Total CPU percentage = Total CPU usage time since boot/Total CPU time since boot * 100%

위의 계산 공식을 사용하면 특정 CPU 사용량이나 시스템의 전체 CPU 사용량을 계산하는 것은 어렵지 않습니다.

예: 시스템의 전체 CPU 사용량을 계산합니다

먼저 /proc/에서 시간 t1에 시스템의 전체 user, nice, system, idle, iowait, irq, softirq, Steal, guest, guest_nice 값을 가져옵니다. stat를 실행하고 이때의 부팅 이후 총 CPU 시간(total1로 기록)과 부팅 이후 총 CPU 유휴 시간(idle1로 기록) 값을 구합니다.

두 번째로 /proc/stat에서 시간 t2에 시스템의 부팅 이후 총 CPU 시간(total2로 기록됨)과 부팅 이후 총 CPU 유휴 시간(idle2로 기록됨)을 가져옵니다. (방법은 이전 단계와 동일)

마지막으로 t2에서 t1 사이의 시스템 전체 CPU 사용량을 계산합니다. 즉,

CPU percentage between t1 and t2 = ((total2-total1)-(idle2-idle1))/(total2-total1)* 100%

그 중 ((total2-total1)-(idle2-idle1))은 실제로 t1과 t2 사이에 시스템 CPU가 점유된 시간(총 시간 - 유휴 시간)입니다.

다음은 일정 기간 동안의 CPU 사용량을 계산하는 스크립트입니다.

#!/bin/bash
# by Paul Colby (http://colby.id.au), no rights reserved ;)
PREV_TOTAL=0
PREV_IDLE=0
while true; do
  # Get the total CPU statistics, discarding the 'cpu ' prefix.
  CPU=(`sed -n 's/^cpu\s//p' /proc/stat`)
  IDLE=${CPU[3]} # Just the idle CPU time.
  # Calculate the total CPU time.
  TOTAL=0
  for VALUE in "${CPU[@]}"; do
    let "TOTAL=$TOTAL+$VALUE"
  done
  # Calculate the CPU usage since we last checked.
  let "DIFF_IDLE=$IDLE-$PREV_IDLE"
  let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
  let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
  echo -en "\rCPU: $DIFF_USAGE%  \b\b"
  # Remember the total and idle CPU times for the next check.
  PREV_TOTAL="$TOTAL"
  PREV_IDLE="$IDLE"
  # Wait before checking again.
  sleep 1
done

위 내용은 Linux에서 특정 CPU 사용량을 계산하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.