Linux
CPU統計計算算法
我在網際網路上搜尋太多,找不到算法計算 %Us , %Sy , %Id ,… 在 top 命令的結果上。但找不到任何文件。像this或this這樣
的 一些文件計算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%