Linuxでメモリを開放したい場合、Linuxカーネル2.6.6移行であればカーネルの値を書き換える事で開放が可能となっている。
以下のようにコマンドを実行することで、メモリを開放できる。
echo メモリ開放の種類 > /proc/sys/vm/drop_caches
もしくは、sysctlコマンドを用いる。
sysctl -w vm.drop_caches=メモリ開放の種類
メモリ開放の種類は、以下の3種類ある。
開放したいメモリの数字を指定する。
- ページキャッシュ
- ダーティキャッシュ・inode
- ページキャッシュ・ダーティキャッシュ・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]#
確かにキャッシュの容量が減っているのがわかる。