3

bashを使用して単一のCPU、Ubuntuシステムの全体的なCPU使用率を計算しようとしています。作成しているシステム監視スクリプトの全体的なCPU使用率が必要です。問題は、次のコードを使用すると、CPU使用率が常に同じになることです。

top -n 1 | grep "Cpu"

私が見つけた別の方法は、次のコードを使用することです。

read cpu a b c previdle rest < /proc/stat
prevtotal=$((a+b+c+previdle))
sleep 0.5
read cpu a b c idle rest < /proc/stat
total=$((a+b+c+idle))
CPU=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))
echo $CPU

このコードの問題は、それが完全に正確かどうかわからないことです。いくつか質問があります...まず、最初のコードが失敗するのはなぜですか?次に、2番目のコードは信頼できますか?そうでない場合、システムの全体的なCPU使用率を確実に読み取るために、どのコードを使用できますか?ありがとう!

4

2 に答える 2

2

コードは、CPU使用率に影響を与える可能性のあるIO待機時間を破棄しています。次のリンクを参照して、各/ proc /stat/エントリが何に対応するかを確認できます。

http://man7.org/linux/man-pages/man5/proc.5.html

全体的なCPU使用率は、次の式で計算できます。

CPU_Util =(user + system + nice + softirq + steal)/(user + system + nice + softirq + steal + idle + iowait)

50ミリ秒以上のCPU使用率を計算する単純なbashスクリプトは次のようになります。

#!/system/bin/sh

# Read /proc/stat file
read cpu user nice system idle iowait irq softirq steal guest< /proc/stat

cpu_active_prev=$((user+system+nice+softirq+steal))
cpu_total_prev=$((user+system+nice+softirq+steal+idle+iowait))

usleep 50000

read cpu user nice system idle iowait irq softirq steal guest< /proc/stat

cpu_active_cur=$((user+system+nice+softirq+steal))
cpu_total_cur=$((user+system+nice+softirq+steal+idle+iowait))

cpu_util=$((100*( cpu_active_cur-cpu_active_prev ) / (cpu_total_cur-cpu_total_prev) ))

echo $cpu_util
于 2014-07-24T23:24:46.333 に答える
1

systatパッケージで利用可能なmpstatは非常に優れています

apt-getを使用してsystatをインストールする必要があります

于 2012-11-23T16:43:20.443 に答える