ablog

不器用で落着きのない技術者のメモ

vmstat の出力結果から時間帯毎のCPU使用率を算出する Perl ワンライナー

vmstat は OS によっては -t オプションでタイムスタンプを表示できたりするらしいですが、できない場合でも
http://labs.agenda-style.jp/blog/2011/10/vmstat.html
http://nemf.quickboy.com/2011/07/how-to-add-timestamp-to-vmstat-commnad-output/
こんな感じでタイムスタンプをつけることができます。


タイムスタンプがついている vmstat の出力結果から、時間帯毎にCPU使用率を算出する Perl ワンライナーを書いてみました。

% perl -lane '$.>2 and @t=split(q/:/,$F[1]) and $h->{$t[0]}->{sum}+=$F[21]+$F[22] and $h->{$t[0]}->{cnt}++;END{map{printf(qq/%02d\t%.1f\n/,$_,$h->{$_}->{sum}/$h->{$_}->{cnt})}sort keys %$h}' vmstat.log

加工前のファイルがこんな感じとします。

 procs     memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr s0 s3 s2 s7   in   sy   cs us sy id
20111216 00:01:02  0 0 0 ...
20111216 00:02:02  0 0 0 ...

出力結果はこんな感じになります。1時台は10%程度です。

00      10.3
01      10.1
02      20.2
03      13.8
(中略)
20      21.8
21      20.3
22      12.5
23      16.6