プロセッサの使用率または使用率は、経時的な測定値です。 %
で使用率を測定する 1 つの方法 /proc/stat
を 2 回連続して読み取る計算によるものです。 .パーセンテージを計算するための単純な一般的な bash スクリプトは次のとおりです。
#!/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
使用/出力:
$ bash procstat-cpu.sh
Current CPU Utilization : 10
5回の反復で出力:
$ ( 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'
次の行を与えます
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
次のように任意の CPU フィールドをプルできます。ユーザー が取得されます。 CPU (米国)
top -bn1 | sed -n '/Cpu/p' | awk '{print $2}' | sed 's/..,//'
出力:
15.4%
system のような別のフィールドが必要な場合 CPU (sy) awk フィールドを $2 から変更できます、
top -bn1 | sed -n '/Cpu/p' | awk '{print $3}' | sed 's/..,//'
出力:
5.3%
他の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.
システムを起動してからの合計使用率を取得するには:
awk '/cpu /{print 100*($2+$4)/($2+$4+$5)}' /proc/stat
最後の 1 秒間の使用率を取得するには:
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
説明
man 5 proc
から /proc/stat
の cpu 行の最初の 4 つの数字の意味 によって与えられます:
CPU 3357 0 4313 1362393
USER_HZ (ほとんどのアーキテクチャでは 1/100 秒、適切な値を取得するには sysconf(_SC_CLK_TCK) を使用) の単位で測定された、システムがユーザー モード、優先度の低いユーザー モード (nice)、システムモード、およびアイドルタスクをそれぞれ。最後の値は、uptime 疑似ファイルの 2 番目のエントリの USER_HZ 倍である必要があります。
CPU 使用率を取得し、ユーザー時間とシステム時間を加算して、ユーザー時間、システム時間、およびアイドル時間の合計で割ります。
システム起動後の合計 CPU 使用率の計算をもう一度見てみましょう:
awk '/cpu /{print 100*($2+$4)/($2+$4+$5)}' /proc/stat
行が cpu
に一致することを要求することによって 、システムの合計を取得します。 2 列目はユーザー時間、4 列目はシステム時間、5 列目はアイドル時間です。比率を 100 倍してパーセンテージを取得します。
ここで、最近の 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
これは /proc/cpu
を読み取ります 1 秒間隔で 2 回。最初に、CPU ユーザー + システム、およびユーザー + システム + アイドル時間が変数 a
に保存されます。 . sleep
秒遅延するように呼び出されます。次に、/proc/cpu
二度目に読まれます。古いユーザーとシステムの合計を新しい合計から差し引き、すべての時間の合計の変化で割ります。結果を 100 倍してパーセントに変換し、出力します。