LoginSignup
0
1

More than 1 year has passed since last update.

mpstat を使って CPU コアの使用率を取得

Posted at

CPU コアごとの使用率を数字で取得したい。

topコマンドを使うと、「t」-「t」-「1」で表示される。

top - 15:22:44 up 16 days, 21:07,  5 users,  load average: 0.18, 0.11, 0.06
Tasks: 212 total,   1 running, 211 sleeping,   0 stopped,   0 zombie
%Cpu0  :   1.7/1.0     3[                                                     ]
%Cpu1  :   2.7/0.7     3[                                                     ]
MiB Mem :   3747.8 total,    230.7 free,   1058.1 used,   2459.0 buff/cache
MiB Swap:   2048.0 total,   1104.2 free,    943.8 used.   2363.9 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND  
    924 nanbuwks  20   0  497116  13412   4728 S   2.7   0.3 478:05.78 Xorg     
   1182 nanbuwks  20   0 3961512  73720  14468 S   2.3   1.9 644:43.25 gnome-s+ 
 254699 nanbuwks  20   0  731940  13576  11660 S   1.0   0.4 160:04.04 check-n+ 
     14 root      20   0       0      0      0 I   0.3   0.0  10:34.36 rcu_sch+ 
    628 root      20   0    2548     40      0 S   0.3   0.0  18:33.31 acpid    
   1165 nanbuwks  20   0  950656  52080   8016 S   0.3   1.4  95:50.11 node /h+ 
 182332 Debian-+  20   0   26888   6064   2696 S   0.3   0.2  13:31.30 snmpd    
 675961 root      20   0       0      0      0 I   0.3   0.0   0:00.61 kworker+ 

テキストコピペだと見えないけど、実際には CPU コアの使用率が以下のように白いグラフで表示されている。

image.png

この数字をスクリプトで取得したい。

top だといろんな数字がごちゃまぜになる。この数字だけ取得できないかな?・・・と思ったが意外と無い。

システムコールなども簡単に使えそうなものが無いっぽい。仕方なく、top のようなコマンドの出力をパースすることにした。

top, snmpwalk, sar などで取得できるが、今回は MPSTAT の出力をパースすることにした。

環境

  • Ubuntu 20.04 ja LTS
  • sysstat (mpstat) 12.2.0

MPSTAT

パッケージ sysstat に含まれています。
インストール

$ sudo apt install sysstat

通常の表示

$ mpstat 
Linux 5.15.0-43-generic (nanbuwks-PRIMERGY-TX1310-M3) 	2022年08月22日 	_x86_64_	(2 CPU)

15時40分52秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
15時40分52秒  all    3.42    0.04    0.96    1.75    0.00    0.02    0.00    0.00    0.00   93.82

CPUコアそれぞれ表示

$ mpstat -P ALL
Linux 5.15.0-43-generic (nanbuwks-PRIMERGY-TX1310-M3) 	2022年08月22日 	_x86_64_	(2 CPU)

15時41分33秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
15時41分33秒  all    3.42    0.04    0.96    1.75    0.00    0.02    0.00    0.00    0.00   93.82
15時41分33秒    0    3.32    0.02    0.99    1.89    0.00    0.01    0.00    0.00    0.00   93.77
15時41分33秒    1    3.52    0.05    0.92    1.62    0.00    0.02    0.00    0.00    0.00   93.86

数字として取り出す

上のような出力から、AWK でデータを抜き出してみました。
まずは5行目の3番目のフィールド値、 CPU0 の %usr 値を取り出します。

$ mpstat -P ALL | awk 'NR==5 {print $3}'
3.32

うまく取れましたね。では usr 以外の負荷も合計した値を取り出したいので、100%から %idle を引いた値を取り出してみます。

$ mpstat -P ALL | awk 'NR==5 {print 100-$12}'
6.23

この値を zabbix-sender に取り込みたいので、整数値に直すようにしてみます。

$ mpstat -P ALL | awk 'NR==5 {print int(100-$12)}'
6

最初に変数 cpu に番号を入れるようにしてみました。

$ cpu=0; mpstat -P ALL | awk -v cpuno="$cpu" 'NR==cpuno+5 {print int(100-$12)}'
6

なお、-1を入れると CPUすべての総合値が出力されます。

$ cpu=-1; mpstat -P ALL | awk -v cpuno="$cpu" 'NR==cpuno+5 {print int(100-$12)}'
6
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1