GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan persentase penggunaan prosesor dengan bash?

Penggunaan atau pemanfaatan prosesor adalah pengukuran dari waktu ke waktu. Salah satu cara untuk mengukur penggunaan di % adalah dengan perhitungan selama dua pembacaan berturut-turut dari /proc/stat . Skrip bash umum sederhana untuk menghitung persentase adalah:

#!/bin/bash

# Read /proc/stat file (for first datapoint)
read cpu user nice system idle iowait irq softirq steal guest< /proc/stat

# compute active and total utilizations
cpu_active_prev=$((user+system+nice+softirq+steal))
cpu_total_prev=$((user+system+nice+softirq+steal+idle+iowait))

usleep 50000

# Read /proc/stat file (for second datapoint)
read cpu user nice system idle iowait irq softirq steal guest< /proc/stat

# compute active and total utilizations
cpu_active_cur=$((user+system+nice+softirq+steal))
cpu_total_cur=$((user+system+nice+softirq+steal+idle+iowait))

# compute CPU utilization (%)
cpu_util=$((100*( cpu_active_cur-cpu_active_prev ) / (cpu_total_cur-cpu_total_prev) ))

printf " Current CPU Utilization : %s\n" "$cpu_util"

exit 0

gunakan/keluaran:

$ bash procstat-cpu.sh
 Current CPU Utilization : 10

menghasilkan lebih dari 5 iterasi:

$ ( declare -i cnt=0; while [ "$cnt" -lt 5 ]; do bash procstat-cpu.sh; ((cnt++)); done )
 Current CPU Utilization : 20
 Current CPU Utilization : 18
 Current CPU Utilization : 18
 Current CPU Utilization : 18
 Current CPU Utilization : 18

top -bn1 | sed -n '/Cpu/p'

berikan baris berikut

Cpu(s): 15.4%us,  5.3%sy,  0.0%ni, 78.6%id,  0.5%wa,  0.0%hi,  0.1%si,  0.0%st

Anda dapat menarik bidang CPU apa pun dengan yang berikut akan mengambil pengguna CPU (AS)

top -bn1 | sed -n '/Cpu/p' | awk '{print $2}' | sed 's/..,//'

Keluaran:

15.4%

Jika Anda menginginkan bidang lain seperti sistem CPU (sy) Anda dapat mengubah bidang awk dari $2,

top -bn1 | sed -n '/Cpu/p' | awk '{print $3}' | sed 's/..,//'

Keluaran:

5.3%

Jika Anda menginginkan CPU lain:

us:     user    CPU used by user processes
sy:     system  CPU used by system/kernel processes
ni:     nice    CPU used by processes that were reniced
id:     idle    CPU not used
wa:     io wait     Essentially idle CPU waiting on IO devices
hi:     hardware irq    CPU used to service hardware IRQs
si:     software irq    CPU used to service soft IRQs
st:     steal time  CPU time which the hypervisor dedicated (or ‘stole’) for other guests in the system.

Untuk mendapatkan total persentase penggunaan sejak mengaktifkan sistem:

awk '/cpu /{print 100*($2+$4)/($2+$4+$5)}' /proc/stat

Untuk mendapatkan persentase penggunaan selama detik terakhir:

awk -v a="$(awk '/cpu /{print $2+$4,$2+$4+$5}' /proc/stat; sleep 1)" '/cpu /{split(a,b," "); print 100*($2+$4-b[1])/($2+$4+$5-b[2])}'  /proc/stat

Penjelasan

Dari man 5 proc , arti dari empat angka pertama pada baris cpu di /proc/stat diberikan oleh:

cpu 3357 0 4313 1362393
Jumlah waktu, diukur dalam satuan USER_HZ (1/100 per detik pada sebagian besar arsitektur, gunakan sysconf(_SC_CLK_TCK) untuk mendapatkan nilai yang tepat), yang dihabiskan sistem dalam mode pengguna, mode pengguna dengan prioritas rendah (bagus), sistem mode, dan tugas menganggur, masing-masing. Nilai terakhir harus USER_HZ kali entri kedua dalam file uptimepseudo.

Untuk mendapatkan penggunaan CPU, kami menambahkan waktu pengguna dan sistem dan membaginya dengan total waktu pengguna, sistem, dan waktu diam.

Mari kita lihat kembali perhitungan total penggunaan CPU sejak sistem aktif:

awk '/cpu /{print 100*($2+$4)/($2+$4+$5)}' /proc/stat

Dengan mengharuskan baris cocok dengan cpu , kami mendapatkan total sistem. Kolom kedua adalah waktu pengguna, kolom keempat adalah waktu sistem, dan kolom kelima adalah waktu idle. Rasio dikalikan dengan 100 untuk mendapatkan persentase.

Sekarang, mari pertimbangkan penggunaan CPU baru-baru ini:

 awk -v a="$(awk '/cpu /{print $2+$4,$2+$4+$5}' /proc/stat; sleep 1)" '/cpu /{split(a,b," "); print 100*($2+$4-b[1])/($2+$4+$5-b[2])}'  /proc/stat

Ini membaca /proc/cpu dua kali, terpisah satu detik. Pertama kali, pengguna CPU + sistem, dan pengguna + sistem + waktu idle disimpan dalam variabel a . sleep dipanggil untuk menunda sebentar. Lalu, /proc/cpu dibaca untuk kedua kalinya. Total pengguna + sistem lama dikurangi dari total baru dan dibagi dengan perubahan total sepanjang waktu. Hasilnya dikalikan 100 untuk mengubahnya menjadi persen dan dicetak.


Linux
  1. Cara Menggunakan Perintah Shutdown dan Reboot Linux dengan Contoh

  2. Cara mendapatkan penggunaan CPU

  3. Bagaimana saya bisa menggunakan rsync dengan sistem file FAT?

  1. Bagaimana saya menggunakan Vagrant dengan libvirt

  2. Cara menggunakan perintah riwayat Bash

  3. Cara menggunakan Ansible untuk mengatur pemantauan sistem dengan Prometheus

  1. Cara Membandingkan Sistem Anda (CPU, File IO, MySQL) dengan Sysbench

  2. Bagaimana saya bisa menggunakan perintah alias dengan xargs?

  3. Cara membuat lonjakan CPU dengan perintah bash