GNU/Linux >> Znalost Linux >  >> Linux

Bash:počkejte, až využití procesoru klesne pod prahovou hodnotu

Můžete použít funkci založenou na top utility. Všimněte si však, že to není příliš spolehlivé, protože využití CPU se může - rychle - kdykoli změnit. To znamená, že jen proto, že kontrola proběhla úspěšně, není zaručeno, že využití CPU zůstane nízké, dokud bude spuštěn následující kód. Byli jste varováni.

Funkce:

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

Všimněte si, že používám bc -l pro srovnání, protože top vypisuje využití CPU jako plovoucí hodnotu.


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
}

Všimněte si, že vyžaduje nainstalovaný balíček sysstat.


Mnohem efektivnější verze pouze volá mpstat a awk každý jednou a nechá je oba běžet, dokud nebudou hotové; není třeba explicitně sleep a restartujte oba procesy každou sekundu (což by na vestavěné platformě mohlo přinést měřitelnou režii):

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

Používám $13 tady, protože tam je idle % je pro mou verzi mpstat; vhodně nahraďte, pokud se vaše liší.

To má další výhodu v tom, že správně počítáte s plovoucí desetinnou čárkou, místo abyste museli zaokrouhlovat na celá čísla pro shell-nativní matematiku.


Linux
  1. Odstraňte problémy s vysokým využitím procesoru na Windows Server

  2. Bash:Smyčka, dokud se stav ukončení příkazu nerovná 0

  3. ps a top dávají různé využití CPU

  1. Jak omezit využití CPU procesu v Linuxu

  2. Získat využití CPU v shell skriptu?

  3. Jak mohu zaznamenat využití procesoru na proces?

  1. Bash monitoruje využití disku

  2. Bash:počkejte s časovým limitem

  3. Jak zjistit využití CPU