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つ目のページキャッシュのみをおすすめします。