linux kernel2.6 での メモリーチューニングの方法。大容量物理メモリの場合、ほとんどがページキャッシュ・ファイルキャッシュ。 必要な処置 ?A.早めにダーティーページを掃除させる ?B.できるだけスワップさせない ?C.最低空き容量を大きくする。 ? →ファイルキャッシュがたまらない ? →1つのプロセス分の空きメモリを空けていれば、プロセス起動時にスワップしない。 ? →メモリが必要になった瞬間の、スワップによるスローダウンが防げる A.早めにダーティーページを掃除させる ?pdflushがダーティーページの掃除を行う ? vm.dirty_ratio > ダーティーページの割合 > vm.dirty_background_ratio ? のときpdflushがバックグラウンドで掃除 ? ダーティーページの割合 > vm.dirty_ratio ? のときdflushがフォワグラウンドで掃除
なので、vm.dirty_ratio vm.dirty_background_ratioの値を小さくすれば
こまめに掃除をし、メモリが空く可能性がある。
(メモリが必要になったときに、一括で長時間スローダウンすることが
防げる可能性がある)
しかし、これだけではダーティーページだけでページキャッシュは開放されない
B.最低空き容量を大きくする。 ?空きメモリ容量が vm.min_free_kbytes を下回ったとき
ページキャッシュは開放される。
vm.min_free_kbytesの値を大きくすれば、
ページキャッシュの総量を減らせる。
極端な話、アプリで最大300MBメモリを使用するなら、
この値を307200(=300MB*1024)にしておけばスワップしない(バッファキャッシュがあるぞとかスワップアウトのアルゴリズムが・・・とか細かいことは抜きして)
C.できるだけスワップさせない ?vm.swappiness を減らせばスワップしにくくなる。
(何かのパーセンテージらしい・・・)
[追記]
/proc/sys/vm/drop_caches に値を放り込めば、
キャッシュが即時開放されるらしい(Kernel2.6.16 以降(CentOS5/RHEL5以降))
echo "3" > /proc/sys/vm/drop_caches
1・・・ページキャッシュのみを解放
2・・・ダーティページとinodeキャッシュを解放
3・・・ ページキャッシュとダーティページとinode を解放
実行前にsyncを実行したほうがいいらしい。
2はいいとして、1と3をしたら直後にパフォーマンス悪くなりそう・・・
(コマンドを実行するごとにメッセージファイルを読みにいったりしてるの知ってますか?)
kernel2.4の頃みたいに直接キャッシュサイズを指定できたらここまで悩まんでもいいのに・・・