Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So berechnen Sie die spezifische CPU-Auslastung unter Linux

So berechnen Sie die spezifische CPU-Auslastung unter Linux

coldplay.xixi
coldplay.xixiOriginal
2020-08-22 11:26:393541Durchsuche

Die Methode zur Berechnung der spezifischen CPU-Auslastung unter Linux: Erhalten Sie zuerst den Gesamtwert des Systems zum Zeitpunkt t1 von [/proc/stat] und dann den Gesamtwert des Systems zum Zeitpunkt t2 von [/proc/stat]; Berechnen Sie schließlich t2 und Die gesamte CPU-Auslastung des Systems zwischen t1.

So berechnen Sie die spezifische CPU-Auslastung unter Linux

- -

LING VIDEO Tutorial】

How zur Berechnung der spezifischen CPU -Verwendung unter Linux:

1. kann die Auslastung jeder CPU überprüfen, wie unten gezeigt:

So berechnen Sie die spezifische CPU-Auslastung unter Linux

Die zehn Zahlen nach CPU (0/1/2/…) bedeuten wie folgt:

/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 Berechnen Sie die spezifische CPU-Auslastung

Mit Mit dem oben genannten Hintergrundwissen können wir dann die spezifische CPU-Auslastung berechnen. Die spezifische Berechnungsmethode lautet wie folgt:

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%

Mit der obigen Berechnungsformel ist es nicht schwierig, eine bestimmte CPU-Auslastung oder die gesamte CPU-Auslastung des Systems zu berechnen.

Beispiel: Berechnen Sie die Gesamt-CPU-Auslastung des Systems

Erhalten Sie zunächst die Gesamtwerte für Benutzer, Nice, System, Idle, Iowait, IRQ, Softirq, Steal, Guest und Guest_nice des Systems zum Zeitpunkt t1 aus /proc/ stat, und erhalten Sie die Werte zu diesem Zeitpunkt: Gesamt-CPU-Zeit seit dem Start (aufgezeichnet als total1) und Gesamt-CPU-Leerlaufzeit seit dem Start (aufgezeichnet als Leerlauf1).

Zweitens erhalten Sie die gesamte Gesamt-CPU-Zeit seit dem Start (aufgezeichnet als „total2“) und die gesamte CPU-Leerlaufzeit seit dem Start (aufgezeichnet als „idle2“) des Systems zum Zeitpunkt t2 aus /proc/stat. (Die Methode ist die gleiche wie im vorherigen Schritt)

Berechnen Sie abschließend die gesamte CPU-Auslastung des Systems zwischen t2 und t1. Das heißt:

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

Darunter ist ((total2-total1)-(idle2-idle1)) tatsächlich die Zeit, die die System-CPU zwischen t1 und t2 belegt ist (Gesamtzeit – Leerlaufzeit).

Das Folgende ist ein Skript zur Berechnung der CPU-Auslastung während eines bestimmten Zeitraums:

#!/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

Das obige ist der detaillierte Inhalt vonSo berechnen Sie die spezifische CPU-Auslastung unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn