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.