サーバのCPU使用率

家のサーバ(ML115)ですが,MRTGを使って状態を監視してます.http://centossrv.com/net-snmp-mrtg.shtml を参考にして.
ですが,CPU使用率がまともに取れてないんです.というのもCPU使用率を単にLoad averageを使って見てるんで,本当の使用率じゃないんですよね.というか常にLoad averageは1を超えてる状態なので,このグラフだとCPU100%のように思えてしまうんですが,そんなことはなくて,topとかで見ると結構暇してる.
Load averageって処理待ちしてるプロセスの個数がいくつかってだけなので,処理が渡されたけどすぐにやることがなくなってyield?するようなプロセスがいっぱいあると,CPU使用率とLoad averageが乖離していくんですよね.正確なところはわかってないけど.
で,ちょっと調べたらsysstat入れてsarを使えばちゃんとしたCPU使用率が取れそうなので,sysstatインスコして,ちょっと下のスクリプト書いて完了.

#!/bin/sh

SAR=`/usr/bin/sar | tail -n 2 | head -n 1`
USER=`echo $SAR | awk {'print($3)'} | sed -e "s/\.[0-9]*//g"`
echo $USER
IDLE=`echo $SAR | awk {'print($8)'} | sed -e "s/\.[0-9]*//g"`
VAR=100
USED=`/usr/bin/expr $VAR - $IDLE`
echo $USED
uptime
echo "CPU usage"

MRTGで使えるように,出力が4行(CPU使用率(user),CPU使用率(all),uptime,名前)になってます.で,これ使って無事にまともなCPU使用率を出せるようになったんです.…が,ここでふと気付いたんですが,別にsysstatをわざわざインストールして使わなくたって,snmpで出せるんじゃね?…(´Д`)
というわけで探してみた.正直snmp良く覚えてないので過去の日記(http://d.hatena.ne.jp/kz_s/20071124/1195912853)を参照しながら…w そしたらちゃんとCPU使用率ありました.

[root@hmx ~]# snmpwalk -v 2c -c public IPアドレス .1.3.6.1.4.1.2021.11.9.0
UCD-SNMP-MIB::ssCpuUser.0 = INTEGER: 2
[root@hmx ~]# snmpwalk -v 2c -c public IPアドレス .1.3.6.1.4.1.2021.11.11.0
UCD-SNMP-MIB::ssCpuIdle.0 = INTEGER: 70

というわけでこっちを使うように変更.本当はMRTGにそのままSNMPから渡したかったんですが,総使用率が出せないっぽくて,それをするにはやはり100-Idleをしないとダメそうだったので….

#!/bin/sh

/usr/bin/snmpwalk -v 2c -c public IPアドレス .1.3.6.1.4.1.2021.11.9.0  | awk {'print($4)'}
IDLE=`/usr/bin/snmpwalk -v 2c -c public IPアドレス .1.3.6.1.4.1.2021.11.11.0 | awk {'print($4)'}`
VAR=100
USED=`/usr/bin/expr $VAR - $IDLE`
echo $USED
uptime
echo "CPU usage"

んでまあこっちでも無事に動作することを確認.こっちの方が測定のオーバヘッドが小さいっぽい.
現状,このサーバマシンでは仮想マシンが2個立ち上がってますが,CPU使用率は25%程度で済んでるようです.…デュアルコアに変えようかと思ってたけど,その必要がなさそうだ….
で,sysstatはアンインストールかなw