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

2019年10月30日

Linuxには一度ディスクから読んだデータをメモリ上に残しておくページキャッシュという仕組みがあります。

このページキャッシュのおかげで次回から高速に同じディスク上のデータを読むことができるようになっており、ボトルネックになりやすいディスクI/Oのパフォーマンスに貢献しています。

ページキャッシュの確認

メモリの使用量を確認できるfreeコマンドで簡単に確認することができます。

$ free -m
             total       used       free     shared    buffers     cached
Mem:          2015       1599        416          5         28        716
-/+ buffers/cache:        854       1161
Swap:         2047          0       2047

cachedというカラム値が現在キャッシュに使用されているメモリ量になります。

ちなみにfreeコマンドのmオプションは表示単位をメガバイト単位にしてくれるオプションです。

他にも以下のようなオプションがあります。

  • -g: ギガバイト単位
  • -k: キロバイト単位(オプション指定無しのデフォルト)
  • -b: バイト単位
  • –tera: テラバイト単位(省略形なし)
  • -h: 人間が読みやすいように表示

詳しくはman freeで確認して下さい。

ページキャッシュの解放

ページキャッシュの解放は以下のようにprocファイルシステムに値を書き込むことによって行うことができます。

# echo 1 >/proc/sys/vm/drop_caches
または
# sysctl vm.drop_caches=1

書き込む値の意味は以下のようになっています。

  • 1: ページキャッシュの解放
  • 2: Slabキャッシュの解放
  • 3: ページキャッシュとSlabキャッシュの解放

Slabキャッシュとはファイルやディレクトリに関するメタデータ(付随する情報)のキャッシュとなります。

値を書き込んだ後、以下のようにcachedのカラム値が減少してキャッシュが解放されている事が確認できると思います。

$ free -m
             total       used       free     shared    buffers     cached
Mem:          2015        908       1107          5          0         58
-/+ buffers/cache:        849       1166
Swap:         2047          0       2047

※一時的にシステムが高負荷になったりパフォーマンスが低下する事がありますので、実運用中のサーバでのキャッシュの解放は慎重に行って下さい。(本番で試すような機会はほぼ無いと思いますが…)