GNU/Linux >> Linux の 問題 >  >> Linux

Bash:CPU 使用率がしきい値を下回るまで待ちます

top に基づく関数を使用する場合があります 効用。ただし、CPU 使用率はいつでも (急速に) 変化する可能性があるため、これはあまり信頼できないことに注意してください。つまり、チェックが成功したからといって、次のコードが実行される限り CPU 使用率が低いままであるとは限りません。警告されました。

機能:

function wait_for_cpu_usage {
    threshold=$1
    while true ; do
        # Get the current CPU usage
        usage=$(top -n1 | awk 'NR==3{print $2}' | tr ',' '.')

        # Compared the current usage against the threshold
        result=$(bc -l <<< "$usage <= $threshold")
        [ $result == "1" ] && break

        # Feel free to sleep less than a second. (with GNU sleep)
        sleep 1
    done
    return 0
}

# Example call
wait_for_cpu_usage 25

bc -l を使用していることに注意してください top は CPU 使用率を float 値として出力するため、比較のために


wait_for_cpu_usage()
{
    current=$(mpstat 1 1 | awk '$12 ~ /[0-9.]+/ { print int(100 - $12 + 0.5) }')
    while [[ "$current" -ge "$1" ]]; do
        current=$(mpstat 1 1 | awk '$12 ~ /[0-9.]+/ { print int(100 - $12 + 0.5) }')
        sleep 1
    done
}

sysstat パッケージをインストールする必要があることに注意してください。


mpstat を呼び出すだけのはるかに効率的なバージョン そして awk それぞれ1回ずつ、完了するまで両方を実行し続けます。明示的に sleep する必要はありません 両方のプロセスを毎秒再起動します (組み込みプラットフォームでは、測定可能なオーバーヘッドになる可能性があります):

wait_until_cpu_low() {
    awk -v target="$1" '
    $13 ~ /^[0-9.]+$/ {
      current = 100 - $13
      if(current <= target) { exit(0); }
    }' < <(LC_ALL=C mpstat 1)
}

$13 を使用しています idle % がここだから 私のバージョンの mpstat 用です。異なる場合は適切に置き換えてください。

これには、シェルネイティブの計算のために整数に丸める必要がなく、浮動小数点計算を正しく行うという特別な利点があります。


Linux
  1. シェルスクリプトでCPU使用率を取得しますか?

  2. Bash モニターのディスク使用量

  3. Bash:タイムアウトで待機

  1. CPU使用率を取得する方法

  2. bash-script でサービスが開始されるまで待ちます

  3. Linuxでパーセンテージで指定されたCPU使用率の正確な計算?

  1. LinuxでプロセスのCPU使用率を制限する方法

  2. 非常に高い CPU 使用率で実行されている Jenkins

  3. ps と top は異なる CPU 使用率を示します