継続して5秒間隔でHDDにアクセスが発生する(未解決)
ずいぶん前から気にはなっていたのだけど、CentOS を入れている自鯖で、5秒間隔ぐらいで HDD へのアクセスが発生し続けています。
HDD を省電力状態で動かそうとしている人達も、同様の現象で困っているらしく原因と解決策がいくつか見つかったので試してみました。(でも、改善していません(汗))
pdflush の動作間隔を長くする
http://lets-ubuntu.yui.at/tips/tips_hdparm.html を参考に設定。
一時的に設定するのであれば、ThinkItの記事(http://www.thinkit.co.jp/free/tech/23/5/)にあるように、echo を使用して書き込む手も。
[root@gentoo ~]# echo 600000 > /proc/sys/vm/dirty_writeback_centisecs
[root@gentoo ~]# echo 500000 > /proc/sys/vm/dirty_expire_centisecs
pdflush の更新間隔を長くしても、相変わらず 5 秒間隔でアクセスしているのでさらに調べた結果、ext3 の場合はジャーナルを kjournald というデーモンで定期的に HDD に書き出しているらしいです。そのデフォルト間隔が 5 秒。@ITの記事が ext3 のトランザクション処理について、分かりやすく説明してくれいてます。詳しくは http://www.atmarkit.co.jp/flinux/rensai/fs04/fs04b.html を参照。
kjournald のトランザクションコミット間隔を長くする
ってことで、kjournald のトランザクションコミット間隔を長くする。
現在のトランザクションコミット間隔は dmesg | grep "kjournald" とかすれば分かります。
ext3 のファイルシステムのマウント時に出力されているメッセージらしいです。
[root@gentoo ~]# dmesg | grep "kjournald"
kjournald starting. Commit interval 5 seconds
kjournald starting. Commit interval 5 seconds
kjournald starting. Commit interval 5 seconds
kjournald のコミット間隔は、マウント時のパラメータで指定します。
commit=秒数 を /etc/fstab に追記。
/dev/sdc1 / ext3 defaults,commit=21600 1 1 /dev/sdb1 /home ext3 defaults,commit=21600 1 2 LABEL=/boot /boot ext3 defaults,commit=21600 1 2 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/sdd1 swap swap defaults 0 0
ext3 の設定については、http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.6/filesystems/ext3.txt.html を
参考に。
ここまで設定して試したのですが、相変わらず5秒間隔で HDD アクセスが発生します。
おかしいなと思い、dmesg | grep "kjournald" してみると・・・
...orz
[root@gentoo ~]# dmesg | grep "kjournald"
kjournald starting. Commit interval 5 seconds
kjournald starting. Commit interval 21600 seconds
kjournald starting. Commit interval 21600 seconds
なんだか一つだけ設定されていない。fstab には commit=... と記述できているので、何かの制限があるのかも。ということで、もう少し調べます。
ちなみに、コミット間隔や、pdflush の動作間隔は適当です。元々は両方とも5秒であったことを考えると、あわせたほうが良いのかも。物理データとジャーナルの出力タイミングをずらしておく必要も無いでしょうし。
追記
どうやら、ルートファイルシステムが fstab の設定と違う内容でマウントされているっぽい。
/boot から起動されてマウントされるときに、ファイルシステム標準の設定でマウントされているのかな・・・
追記(5/13)
commit=21600 と設定して再起動した場合でも "kjournald starting. Commit interval 5 seconds" のように表示されているので勘違いしていたのですが、実際に測定してみると HDD アクセスが 10 秒ごとに伸びていたので、commit=21600 は効果があった模様。
次は 10 秒ごとに HDD アクセスしているデーモンをつきとめて改善すれば良いわけです・・・