ページキャッシュの手動解放
カーネルパラメータvm.drop_caches*1を変更すると、ページキャッシュ・ダーティページ・inodeキャッシュを強制的に解放するらしいです。
ということで、試してみます。
- 環境
- OS: Debian GNU/Linux 4.0(etch/Kernel 2.6.18)
- Memory: 1GB
検証前のメモリ状況です。
# free total used free shared buffers cached Mem: 906792 60240 846552 0 3252 29892 -/+ buffers/cache: 27096 879696 Swap: 1012052 0 1012052 # cat /proc/meminfo (抜粋) MemTotal: 906792 kB MemFree: 846568 kB Buffers: 3268 kB Cached: 29892 kB Active: 34940 kB Inactive: 17792 kB Dirty: 108 kB
1GBのダミーファイルを読み込みます。
ファイル読み込み後、メモリ状況を確認します。
# dd if=tempfile of=/dev/null bs=1024 1048576+0 records in 1048576+0 records out 1073741824 bytes (1.1 GB) copied, 7.12866 seconds, 151 MB/s # free total used free shared buffers cached Mem: 906792 897976 8816 0 2184 867696 -/+ buffers/cache: 28096 878696 Swap: 1012052 0 1012052 # cat /proc/meminfo MemTotal: 906792 kB MemFree: 8816 kB Buffers: 2216 kB Cached: 867696 kB Active: 32724 kB Inactive: 856756 kB Dirty: 16 kB
cached(ページキャッシュ)が増大しています。
sysctlコマンドで、カーネルパラメータを変更します。
# sysctl -w vm.drop_caches=1 vm.drop_caches = 1 # free total used free shared buffers cached Mem: 906792 35864 870928 0 140 8328 -/+ buffers/cache: 27396 879396 Swap: 1012052 0 1012052 # cat /proc/meminfo MemTotal: 906792 kB MemFree: 870868 kB Buffers: 192 kB Cached: 8344 kB Active: 27868 kB Inactive: 240 kB Dirty: 68 kB
cached(ページキャッシュ)が解放されて、MemFreeが増加しています。
vm.drop_cachesへ引き渡すパラメータにより、以下のような動作になります。
- 0 -> 初期値
- 1 -> ページキャッシュの解放
- 2 -> ダーティページとinodeキャッシュの解放
- 3 -> ページキャッシュとダーティページとinodeキャッシュの解放
vm.drop_cachesの値は、/proc/sys/vm/drop_cachesファイルに設定されます。
今回は未検証ですが、キャッシュの解放によりパフォーマンスの低下が考えられます。
また、キャッシュ解放前にはsyncコマンドを実行した方が良いです。