Slabキャッシュをクリアした話

こんにちは。グローバルソリューション事業部の渡辺です。

 

 

なぜかメモリ使用率が高い状況に遭遇

 

とあるNagiosサーバのメモリ使用率が異常に高いことに気付きました

nagios_memory

こちらのサーバの状態は以下のような感じです。

  • 監視対象は20ノード程度で、ほとんどpingのみ。
  • Nagios以外にはこれといって動いていない。
  • CPU使用率やロードアベレージには余裕がある。

経験的にこんなにメモリを使うとは思えませんでした。なんか怪しいです。

 

グラフが間違えているんじゃないの?とfreeコマンドで確認してみます。

う~ん、確かに3374276という数字が見えるので大体3.2GB使用しているようです。

 

psコマンドで表示されるRSSの列を足してみました。

339124と表示されます、330MBくらいかな。

ただ共有メモリとかあるので、あんまりこの計算は当てにならない気もします。

とにかくpsコマンドではメモリを大量に使用しているプロセスは見当たりませんでした。

 

いろいろとググっていると、Slabキャッシュなるものがあるとわかります。

メモリ使用量についてのメモ

これはカーネル内のメモリ領域らしい。

[linux]メモリ使用量とスラブ

Slabは昨日調べてみたら、カーネルが使うキャッシュのようなものらしい。

スラブキャッシュ

カーネルは、メモリの利用効率を高めるために、カーネル空間内のさまざまな メモリ資源を、資源ごとにキャッシュをする仕組みを備えています。 これを「スラブキャッシュ」と呼びます。

Linux スラブ・アロケーターの徹底調査

カーネルは、メモリの利用効率を高めるために、カーネル空間内のさまざまな メモリ資源を、資源ごとにキャッシュをする仕組みを備えています。 これを「スラブキャッシュ」と呼びます。

正直なところ、理解するのが難しいですが、キャッシュの一種であることはわかります。

 

Slabキャッシュ使用量は/proc/meminfoで確認できます。

メモリ3GB以上使ってますね。犯人はこいつだ。

 

ただこれ以上は、正直よくわかりませんでした。

slabtopというコマンドがあったり、/proc/slabinfo というファイルがあったり、slabキャッシュの内訳をさらに確認できそうですが、一見して「ウッ!」となりました。

 

Slabキャッシュのクリア

試しにSlabキャッシュをクリアしてみました。

echo 2 > /proc/sys/vm/drop_caches でSlabキャッシュをクリアできますが、念のためsyncしてから実行しました。

Slabキャッシュクリア後の様子

Nagiosは問題なく稼働し続けています。

 

Slabキャッシュは当然激減しました。(3224696→36596)

 

freeコマンドでもメモリ使用量の激減を確認できました。(3374276→185964)

 

psコマンドの結果は、特に変化ないです。

 

Cactiのリソースグラフでも激減を確認できました。

slab_clear

 

 

まとめ

Linuxでメモリ確認できる方法はたくさんありますが、理解するのは難しいですね。

メモリ使用率が高いのにpsコマンドでは該当プロセスを発見できない場合、Slabを疑ってみるといいかもしれません。

今回は「とりあえずクリア」で済ませましたが、次に同じ状況に遭遇したら、もう少し調べてみようかなーと思います。

Share on LinkedIn
LINEで送る
Pocket

claraer

claraer