2月
23
■CentOS5.xでdstatの–top-ioオプションを使う
CentOS5.xで極短時間でもI/O負荷を上げているプロセスを特定する方法としてdstatを使うことでそれが可能です。しかしdstatの–top-ioオプションはketnel2.6.20以上が必要で、CentOS5.x標準のkernel2.6.18では利用できません。そこでCentOS5.xでもそれを利用する方法を調べてみました。
dstat
http://dag.wieers.com/home-made/dstat/dstat.1.html
今回はELrepoというハードウェアリポジトリから3.0系のkernelを導入します。
ELrepoはCentOS/RedHat用のリポジトリで、既存のソフトウェアパッケージ群と整合性があります。kernelアップデートしても既存のソフトウェアが勝手にバージョンアップされることはありません。
- # rpm -ivh http://elrepo.org/elrepo-release-5-4.el5.elrepo.noarch.rpm
- # vi /etc/yum.repos.d/elrepo.repo
- [elrepo-kernel]
- name=ELRepo.org Community Enterprise Linux Kernel Repository - el5
- baseurl=http://elrepo.org/linux/kernel/el5/$basearch/
- mirrorlist=http://elrepo.org/mirrors-elrepo-kernel.el5
- enabled=1
- gpgcheck=1
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
- protect=0
- # yum update
- # yum install kernel-lt kernel-lt-devel
kernel3.0で起動するとudevの起動時にエラーメッセージが出るので以下を修正。
- # vi /etc/udev/rules.d/05-udev-early.rules
- ACTION=="add", SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt"
- ↓
- #ACTION=="add", SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt"
- ※iscsiが使われていないこと。iscsiを有効のまま使う場合は以下。
- ACTION=="add", SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", WAIT_FOR_SYSFS="ioerr_cnt"
- # reboot
起動画面で3.0kernel選択、起動後に起動kernelを確認する。
- # uname -r
- 3.0.66-1.el5.elrepo を確認
これでdstatのフル機能が利用できるようになります。
dstatは最新版をインストールします。
- # wget http://dag.wieers.com/home-made/dstat/dstat-0.7.2.tar.bz2
- # tar jxvf dstat-0.7.2.tar.bz2
- # cd dstat-0.7.2
- # ./dstat -alt --top-io --top-bio --top-cpu --top-cputime --top-cputime-avg --top-mem
各ディスクやネットワーク単位でトラフィックを取得する場合
- # ./dstat -cdnlt -N eth0,eth1,total -D sda1,sda2,sda3,total --top-io --top-bio --top-cpu --top-cputime --top-cputime-avg --top-mem
ファイルに書く場合は2つ方法があります。
CSV用のカンマ区切り(画面も表示)
- # ./dstat -cdnlt -N eth0,eth1,total -D sda1,sda2,sda3,total --top-io --top-bio --top-cpu --top-cputime --top-cputime-avg --top-mem -o filename
terminal画面の出力をそのまま保存(画面表示無)
- # ./dstat -cdnlt -N eth0,eth1,total -D sda1,sda2,sda3,total --top-io --top-bio --top-cpu --top-cputime --top-cputime-avg --top-mem > filename
これによって1秒ごとにサーバの動作状況とその時に最も活動しているプロセスとその対象をいくつかの指標でログに取得できます。