Linuxでキャッシュをクリアしたい時に使える。
root権限が必要。
# sync
# echo 3 > /proc/sys/vm/drop_caches
echoする数字は1~3があり、
1. ページキャッシュ
2.ダーティーキャッシュとinode
3.ページキャッシュ、ダーティーキャッシュ、inode
「1」が読み込みに、「2」が書き込みに関連してそう。
※8/23追記※
間違えた理解をしていたので修正しました。
dentriesをdirtyと読み間違えるとか恥ずかしいですが指摘してくれた方に感謝です。
kernel.org内のドキュメントを見ると「2」はslab領域()の開放とのこと。
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):
echo 2 > /proc/sys/vm/drop_caches
To free slab objects and pagecache:
echo 3 > /proc/sys/vm/drop_caches
slab・・・・kernelがdentry等をキャッシュするために使うメモリ領域。
※slabについてはこちらを参照しました。
dentryは「ファイル名やディレクトリ階層構造を管理するデータ構造」ということぐらいしか理解できず。別の機会に調べるということで。こちらを参照。
※追記ここまで※
とりあえず「3」を指定しておけば良さそう。
※これが使用できるのはkernel2.6.6以降とのこと。
rootでスクリプト作成しておいて、SUID付けておけば便利そう。
rootが使えない環境はmemhogコマンドなどで対応。
マシンのメモリ搭載量よりも大きくmemhogしてしまうとoom(out of memory)キラーが発動してOSが落ちる可能性があるので注意。
以下は500MBのメモリ領域をクリアした例。ギガの時は「g」とか指定。
$ memhog 500m
..................................................