PR

Linux メモリのキャッシュとバッファを解放する方法

スポンサーリンク
Linux

Linuxサーバはメモリを効率的に使うために、各プロセスが必要としているメモリを割り当てた後は、残りのメモリをバッファとキャッシュに割り当てます。

(freeコマンドの空きメモリが少なく見えるのはこの機能によるものです)

今回は、他の何かのプロセスがメモリを大量に消費していて、これをクリアしたい場合にOSを再起動せずにキャッシュを解放する方法を紹介します。

キャッシュ解放方法

Linuxには、プロセスを止めることなくキャッシュを解放する方法が3つあります。

とりあえず最初はfreeコマンドでキャッシュ(buff/cache)の値を確認してください。

[root@cent77 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1014824      308980      558408        6888      147436      563232
Swap:       2097148           0     2097148

ページキャッシュを解放する方法

[root@cent77 ~]# echo 1 > /proc/sys/vm/drop_caches

freeコマンドで確認します。

[root@cent77 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1014824      308972      652968        6888       52884      604492
Swap:       2097148           0     2097148

slabキャッシュ(dentryキャッシュとi-nodeキャッシュを含む)を解放する方法

[root@cent77 ~]# echo 2 > /proc/sys/vm/drop_caches

freeコマンドで確認します。

[root@cent77 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1014824      301652      662292        6888       50880      612808
Swap:       2097148           0     2097148

ページキャッシュとslabキャッシュをまとめて解放する方法

[root@cent77 ~]# echo 3 > /proc/sys/vm/drop_caches

freeコマンドで確認します。

[root@cent77 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1014824      301724      663900        6888       49200      613584
Swap:       2097148           0     2097148

いずれの3つのコマンドも、アプリケーションを停止させずにキャッシュを解放してくれます。

ただし、2つめ目と3つ目の方法は、slabキャッシュが解放されるので、dentryやinodeが何をしているかを理解しないで実行すると、遅延につながる場合がありますので、とりあえずは一番安全な1つ目のページキャッシュのみをおすすめします。