GNU/Linux >> Znalost Linux >  >> Linux

Jak získat procento využití procesoru pomocí bash?

Využití nebo využití procesoru je měřením v čase. Jeden způsob měření využití v % je výpočtem přes dvě po sobě jdoucí čtení /proc/stat . Jednoduchý běžný bash skript pro výpočet procent je:

#!/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

použití/výstup:

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

výstup v 5 iteracích:

$ ( 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'

dává následující řádek

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

Můžete vytáhnout libovolné pole CPU pomocí následujícího převezme uživatel CPU (us)

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

Výstup:

15.4%

Pokud chcete další pole, například systém CPU (sy) můžete změnit pole awk z $2,

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

Výstup:

5.3%

Pokud chcete jiný CPU:

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.

Chcete-li získat celkové procento využití od spuštění systému:

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

Chcete-li získat procento využití za poslední sekundu:

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

Vysvětlení

Od man 5 proc , což je význam prvních čtyř čísel na cpu řádku v /proc/stat je dáno:

Cpu 3357 0 4313 1362393
Čas měřený v jednotkách USER_HZ (1/100 sekundy na většině architektur, použití sysconf(_SC_CLK_TCK) k získání správné hodnoty), který systém strávil v uživatelském režimu, uživatelském režimu s nízkou prioritou (pěkné), systému režim, respektive nečinná úloha. Poslední hodnoty by měly být USER_HZ krát druhý záznam v uptimepseudo-souboru.

Abychom získali využití CPU, přidáme čas uživatele a systém a vydělíme celkovým počtem uživatelů, systému a času nečinnosti.

Podívejme se znovu na výpočet celkového využití CPU od systému nahoru:

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

Požadováním, aby řádek odpovídal cpu , získáme systémové součty. Druhý sloupec je čas uživatele, čtvrtý systémový čas a pátý čas nečinnosti. Poměr se vynásobí 100 a získá se procento.

Nyní se podívejme na nedávné využití CPU:

 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

To zní /proc/cpu dvakrát, sekundový od sebe. Poprvé se do proměnné a uloží CPU uživatel + systém a uživatel + systém + doba nečinnosti . sleep je vyzván, aby se o vteřinu zdržel. Potom /proc/cpu se čte podruhé. Jeden starý součet uživatel+systém se odečte od nového součtu a vydělí se změnou součtu všech časů. Výsledek se vynásobí 100, převede se na procenta a vytiskne.


Linux
  1. Jak používám Vagrant s libvirt

  2. Jak používat příkazy historie Bash

  3. Jak používat Ansible k nastavení monitorování systému pomocí Prometheus

  1. Jak používat Linux Shutdown and Reboot Command s příklady

  2. Jak získat systémové statistiky pomocí node.js

  3. Jak mohu použít rsync se systémem souborů FAT?

  1. Jak porovnat váš systém (CPU, File IO, MySQL) pomocí Sysbench

  2. Jak mohu používat aliasované příkazy s xargs?

  3. Jak vytvořit špičku CPU pomocí příkazu bash