メモリの容量を気にしてmemcachedの割り当てをかなり絞ってたんだけど、結果的にはmemcachedの割り当てを増やしたらメモリの使用量が安定した。現在の設定は、総メモリ8GBに対してmemcachedが2GB割り当てられている感じ。3GBまでなら行けそうな気がするけど、とりあえず安定してるので様子見。
要するにmemcachedの割り当てを絞って節約した気になってたけど、キャッシュ溢れ分をアプリケーションがカバーする時に消費するメモリの方がよっぽど多くて、それだったら思い切って割り当てて溢れにくくした方が全体の消費量は抑えられる、と。考えてみれば当然のことなのだけど、なんとなく目先の設定値に引きずられてその辺の考慮が足りなかった。
もちろん割り当てを増やせば増やすほど良いということではなくて、アプリケーションのメモリ消費との兼ね合いもあってswapしちゃったら元も子もないし、その辺はバランス。現状ここで書いている環境について言えば、アクセスが集中してもメモリ8GBを正常に動作しているアプリケーションで使い切るのはほとんど無いので、ある程度がっつり割り当てつつ、アプリケーションのメモリ消費などを見直していくのがよいかなと。
ちなみに今のところmemcachedはあくまでキャッシュサーバとして使用していて、高速ストレージとして使用しているわけではないので永続性を気にする必要はないけれども、逆に言えばそういうのは全部MySQLに投げている状態なのでそのうち無理が来るかも。TokyoTyrantを利用して例えば更新クエリはMySQLに投げるけれども、選択クエリはTokyoTyrantに投げるとか言うようにするとパフォーマンスが改善出来る&重い更新クエリが発行されてもパフォーマンスに影響しないと言うのが実現できるかも知れないなーとか。