GNU/Linux >> Linux の 問題 >  >> Linux

bashでプロセッサ使用率を取得するには?

プロセッサの使用率または使用率は、経時的な測定値です。 % で使用率を測定する 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 倍してパーセントに変換し、出力します。


Linux
  1. libvirtでVagrantを使用する方法

  2. Bash履歴コマンドの使用方法

  3. Ansibleを使用してPrometheusでシステム監視を設定する方法

  1. xargs でエイリアス化されたコマンドを使用するにはどうすればよいですか?

  2. bash コマンドで CPU スパイクを作成する方法

  3. CPU使用率を取得する方法

  1. Sysbenchを使用してシステム(CPU、ファイルIO、MySQL)をベンチマークする方法

  2. 例を使用して Linux のシャットダウンおよび再起動コマンドを使用する方法

  3. FAT ファイル システムで rsync を使用するにはどうすればよいですか?