dentry cacheの解放

メモリ使用量がずっと増え続けているマシンがあったんだけどtop+shift+mしても別に特定のプロセスがメモリを食いつぶしているわけではないので原因が分からなくて困ってました

ambari-serverとprestogresが動いているマシンで同じ傾向だったことから状況証拠としてはpostgresqlが怪しいんだけどpostgresql再起動しても状況変わらなかったです。ちなみにOSはCentos 6.5です。

で、結論から言うとどうもdentry cacheが原因で

sudo /sbin/sysctl -w vm.drop_caches=2

すればメモリががつっと減りました。

一番メモり使用量が大きかったマシンだと/proc/meminfoのSlabが38GBぐらい占めててslabtopでdentryが多いのを確認してキャッシュを解放しました。
そうすると以下のようにがつっと減りました。これはambari-serverが動いていたマシンです。

流れとしてはslab肥大化とdentry_cacheに辿り着くまでの話と同じですね。

dentry cacheはファイルやディレクトリとinodeのキャッシュみたいなんですが、freeコマンドでは出てこない数字です。

slabtopコマンドでdentryがどれぐらいかわかります。

こちらも参考になります。
一時ファイルとdentry cacheとメモリ - blog.nomadscafe.jp

この手のものは1週間ぐらいの期間でモニタリンググラフ見てても増加したかどうかたぶん分からないので厄介ですね。
下記のように5ヶ月とか長期間なら分かると思いますが、まあ普通は見なそう。

僕の場合は定期的にモニタリングしてて、なんか以前と比べてメモリ使用量増えてるな〜と感じたので調べました。