ホームページ >運用・保守 >Linuxの運用と保守 >Linux での特定の CPU 使用率を計算する方法

Linux での特定の CPU 使用率を計算する方法

coldplay.xixi
coldplay.xixiオリジナル
2020-08-22 11:26:393658ブラウズ

Linux での特定の CPU 使用率を計算する方法: まず、時間 t1 でのシステムの合計値を [/proc/stat] から取得し、次に時間 t2 でのシステムの合計値を [/proc] から取得します。 /stat]; 最後に、t2 から t1 までのシステムの合計 CPU 使用率を計算します。

Linux での特定の CPU 使用率を計算する方法

#【

関連する学習に関する推奨事項: Linux ビデオ チュートリアル #]

##Linux での特定の CPU 使用率を計算する方法:

1. 背景知識

各 CPU は /proc/stat で確認できます。

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 使用率を計算する

まず、時刻 t1 におけるシステムの全体的な user、nice、system、idle、iowait、irq、softirq、steel、guest を次から取得します。 /proc/stat 、guest_nice の値、ブート後の合計 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。