4

このコマンドを実行しています

grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'

それでも、0.99xxxx%のようなものしか出力しません

apt-get upgrade などのプロセスを実行すると、1% を超えると思います。stress -c 1 を実行しても、何も変わりません。

CPU 使用率を正確に記録する方法はありますか? サーバーには 1 つの vCPU があります。

このログは 5 秒ごとに必要です。

while sleep 5; do "code" >> logfile; done
4

3 に答える 3

5

CPU負荷が数百分の1以上変化しないのはなぜですか?

/proc/statリアルタイムではなく、システムが最後に起動されてからの集約された CPU 負荷統計を返すためです。再起動直後にスクリプトを実行すると、CPU 負荷自体が変化する限り、報告される負荷が大幅に変化する可能性があります。ただし、スクリプトの実行時間が長くなるほど、表示される値に影響を与える負荷の変化が少なくなり、しばらくすると、値は基本的に一定のままになります。

から負荷を計算し、/proc/statそれを実行する既に利用可能なツールを使用しない場合は、2 つの連続したサンプルから差を計算する必要があります。

while sleep 5; do grep -w cpu /proc/stat ; done | \
    awk '{
        print (o2+o4-$2-$4)*100/(o2+o4+o5-$2-$4-$5) "%"
        o2=$2;o4=$4;o5=$5}'

それ以外の場合、より単純ですが精度の低い方法は次のようになります。

vmstat -n 5 | \
    awk '{used=$13+$14;total=used+$15
          if(total>0) print used*100/total "%"}'
于 2015-08-15T22:24:48.537 に答える
2

最高の CPU パーセンテージ (これは、クエリの瞬間に最高の CPU 使用率を持つプロセス) をログに記録する場合は、次を使用できます。

ps -e -o %cpu | tail -n +2 | sort -r | head -n 1 > cpu-usage.log

コマンドの説明:

  • ps -e -o %cpuCPU使用率のみで構成される出力形式で、非常にプロセスのプロセス情報を提供します

  • tail -n +22行目から始まる前の出力をフィルタリングします(したがって、によって出力されたヘッダーは無視されpsます)

  • sort -r値を逆の順序で並べ替えます (高い順)

  • head -n 1によって返されたデータをフィルタリングしてsort、最初の行以外をすべて破棄します

于 2015-08-15T21:01:02.923 に答える
0

私自身の使用のためにわずかに変更された#3:

for x in $(seq 1 11);do sleep 5;grep -w cpu /proc/stat ; done | \
awk '{
    print (o2+o4-$2-$4)*100/(o2+o4+o5-$2-$4-$5) "%"
    o2=$2;o4=$4;o5=$5}'

ここで、seq は取得したサンプル数、Sleep はサンプル間の時間の長さです。

于 2016-04-11T09:07:23.527 に答える