Linux

CPU統計計算算法

  • February 13, 2019

我在網際網路上搜尋太多,找不到算法計算 %Us , %Sy , %Id ,… 在 top 命令的結果上。但找不到任何文件。像thisthis這樣
的 一些文件計算cpu使用率,但輸出與top命令的輸出不相等。(太不同了!!!)

top 或 mpstat 命令如何計算 cpu 統計資訊?

我用這個公式計算:

result=(CurrentUse-PrevUse)*100/(CurrentTotal-PrevTotal)

這是一個範例腳本計算

$$ us,sys,idle $$cpu 的。

#!/bin/bash 

prev_total=0 
prev_idle=0
prev_us=0
prev_sys=0

while true
do
       line=$(head -n1 /proc/stat)

       us=$(echo $line | awk '{print $2}') 
       ni=$(echo $line | awk '{print $3}') 
       sy=$(echo $line | awk '{print $4}') 
       id=$(echo $line | awk '{print $5}') 
       io=$(echo $line | awk '{print $6}') 
       irq=$(echo $line | awk '{print $7}') 
       si=$(echo $line | awk '{print $8}') 
       st=$(echo $line | awk '{print $9}') 
       g=$(echo $line | awk '{print $10}') 
       gn=$(echo $line | awk '{print $11}') 

       total=$(expr $us + $ni + $sy + $id + $io + $irq + $si + $st + $g + $gn) 

       let "diff_total=$total-$prev_total"
       let "diff_idle=$id-$prev_idle"
       let "diff_us=$us-$prev_us"
       let "diff_sys=$sy-$prev_sys"

        let "result_us=$diff_us * 100 / $diff_total" 
        let "result_idle=$diff_idle * 100 / $diff_total" 
        let "result_sys=$diff_sys * 100 / $diff_total" 

        echo -en "\rCpu   us:$result_us%  sys:$result_sys%  idle:$result_idle%\b\b"

       prev_total=$total 
       prev_idle=$id
       prev_us=$us
       prev_sys=$sy
       sleep 1
done

像這樣的輸出:

Cpu   us:1%  sys:0%  idle:97%

引用自:https://unix.stackexchange.com/questions/499924