Linuxのメモリキャッシュを削除する

Linuxでメモリを開放したい場合、Linuxカーネル2.6.6移行であればカーネルの値を書き換える事で開放が可能となっている。
以下のようにコマンドを実行することで、メモリを開放できる。

echo メモリ開放の種類 > /proc/sys/vm/drop_caches

もしくは、sysctlコマンドを用いる。

sysctl -w vm.drop_caches=メモリ開放の種類

メモリ開放の種類は、以下の3種類ある。
開放したいメモリの数字を指定する。

  1. ページキャッシュ
  2. ダーティキャッシュ・inode
  3. ページキャッシュ・ダーティキャッシュ・inode

ダーティキャッシュというのは、ストレージのキャッシュには記録されたのだが、ディスクにはまだ記録されていないデータの事。
下手に消してしまうと、そのデータは失われてしまうので注意。2もしくは3を指定する場合、一度「sync」コマンドを実行する事をおすすめする。

ダーティキャッシュの容量については、「/proc/meminfo」に対し、以下のコマンドを実行すると良いだろう。

grep Dirty /proc/meminfo

[root@dctest01 work]# grep Dirty /proc/meminfo
Dirty:                36 kB

さて、実際にキャッシュをクリアした例がこちら。

[root@dctest01 work]# free
             total       used       free     shared    buffers     cached
Mem:       1885580     777688    1107892      98316          0     415936
-/+ buffers/cache:     361752    1523828
Swap:      2113532     203860    1909672
[root@dctest01 work]# echo 3 > /proc/sys/vm/drop_caches
[root@dctest01 work]# free
             total       used       free     shared    buffers     cached
Mem:       1885580     352288    1533292      98316          0      25272
-/+ buffers/cache:     327016    1558564
Swap:      2113532     203856    1909676
[root@dctest01 work]#

確かにキャッシュの容量が減っているのがわかる。