GNU/Linux >> Belajar Linux >  >> Linux

Bash:tunggu hingga penggunaan CPU di bawah ambang batas

Anda mungkin menggunakan fungsi berdasarkan top kegunaan. Namun perhatikan, melakukan hal itu tidak terlalu dapat diandalkan karena penggunaan CPU dapat - dengan cepat - berubah sewaktu-waktu. Artinya hanya karena pemeriksaan berhasil, tidak dijamin bahwa penggunaan CPU akan tetap rendah selama kode berikut berjalan. Anda telah diperingatkan.

Fungsinya:

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

Perhatikan bahwa saya menggunakan bc -l untuk perbandingan sejak top mencetak penggunaan CPU sebagai nilai 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
}

Perhatikan bahwa paket sysstat perlu diinstal.


Versi yang jauh lebih efisien hanya memanggil mpstat dan awk masing-masing satu kali, dan biarkan keduanya berjalan sampai selesai; tidak perlu secara eksplisit sleep dan mulai ulang kedua proses setiap detik (yang, pada platform tersemat, dapat menambahkan hingga overhead terukur):

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

Saya menggunakan $13 di sini karena di situlah idle % adalah untuk versi mpstat saya; gantikan dengan tepat jika milik Anda berbeda.

Ini memiliki keuntungan ekstra dalam melakukan matematika floating point dengan benar, daripada harus membulatkan ke bilangan bulat untuk matematika asli shell.


Linux
  1. Bash:tunggu dengan batas waktu

  2. Cara mendapatkan penggunaan CPU

  3. Bash:Ulangi hingga status keluar perintah sama dengan 0

  1. Cara Membatasi Penggunaan CPU Suatu Proses Di Linux

  2. Perhitungan akurat penggunaan CPU diberikan dalam persentase di Linux?

  3. Bagaimana cara mencatat penggunaan CPU per proses?

  1. Memecahkan masalah penggunaan CPU yang tinggi di Windows Server

  2. Dapatkan penggunaan CPU dalam skrip shell?

  3. Bash memantau penggunaan disk