Linux中計算特定CPU使用率的方法:首先從【/proc/stat】中取得t1時刻系統總體的值;然後從【/proc/stat】中取得t2時刻系統總的值;最後計算t2與t1之間系統總的CPU使用量。
【相關學習推薦:#linux影片教學##】
Linux中計算特定CPU使用率的方法:
1. 背景知識
在/proc/stat中可以查看每一個CPU的使用情況的,如下圖: #其中cpu(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/stat取得t1時刻系統總體的user、nice、system、idle、iowait、irq、softirq、steal、guest 、guest_nice的值,得到此時Total CPU time since boot(記為total1)和Total CPU idle time since boot(記為idle1)。 其次,從/proc/stat取得t2時刻系統總的Total CPU time since boot(記為total2)和Total CPU idle time since boot(記為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中文網其他相關文章!