インフラエンジニアbacchiのわかったことまとめ

bacchi.me

Linux

不審なプロセスがないのにメモリ使用量が高い場合はslab領域の肥大化を疑うといいかも

更新日:

メモリのfreeが10%を切ったとアラートが飛んできた時の対応のメモです。

top を見てもあやしいプロセスが見つからなくて、
/proc/meminfo を見てみると slab領域の肥大が確認できました。

slabtop で dentry_cache が肥大化している事がわかったので、
echo 2 > /proc/sys/vm/drop_caches を実行しました。

というはなし。

freeコマンドで現在のメモリの使用量を確認する

確かにこのサーバーはメモリの空きが10%切っていますね。

topでメモリドカ食いしてるプロセスが無いか確認

ぱっとみた感じあやしいところはなさそう。

/proc/meminfoでメモリの使用状況を確認

似たような構成のサーバーと比べると、Slab の消費量が多いことがわかりました。

slabtopコマンドで slab領域の確認

確認すると dentry_cache の項目が群を抜いてメモリを消費していました。

また、同スペックの他のサーバーと比較してもこの項目の差異が大きいため、dentry_cache について調べみました。

dentry とは何か?

dentry はファイル名やディレクトリの階層構造、またディレクトリ名とinode情報を関連付けるもの(構造体?)らしい。

dentry_cacheは、それらの情報のキャッシュだと思って良さそう。

dentry_cacheは存在しないディレクトリ情報(i-nodeを持たないdentry)などもキャッシュするそうです。
これを negative dentry というらしいです。

negative dentryは、sar -v コマンドで確認する事ができます。

dentunusdがnegative dentryの数を示します。

このマシンでは negative dentry が有効に利用されるケースはないと判断できるので、このcacheを解放することにしました。

cache の削除

以下のコマンドを実行し、cache を飛ばします。

これで、dentry、 inode のキャッシュを削除することができました。

cache を削除した結果

slabtop を実行して、dentry のメモリ消費量を見てみます。

うん、がっつり減っています。

次に free も実行してみます。

かなり空きができました!!

まとめ

多くのメモリが消費されている割に不審なプロセスが見つからない場合、
dentry_cache を疑うと幸せになれるかもしれませんね。

Sponsor Link

スポンサーリンク

Sponsor Link

スポンサーリンク

-Linux

Copyright© bacchi.me , 2018 AllRights Reserved.