特定のディレクトリ配下のファイルキャッシュを削除する
linux-ftools - Linux command line tools for fallocate, fincore, fadvise, etc - Google Project Hosting tsuchinoko.dmmlabs.com
linux-ftools がとても便利なので、表題のことを実現するスクリプトを書きました。
clear_cache.sh
#!/bin/bash dir="$1" if [ -z $1 ]; then echo "usage: sh $0 dirname" exit 1 fi tmp="/tmp/cached_files" log="/tmp/fadvise.log" create_cache_list() { cached_files_list=`/usr/local/bin/linux-fincore --pages=false --summarize --only-cached ${dir}/* 2> /dev/null` echo "${cached_files_list}" | grep ${dir} | awk {'print $1'} > ${tmp} echo "$1" echo "${cached_files_list}" | tail -n 1 echo "" } clear_cache() { while read line do /usr/local/bin/linux-fadvise ${line} POSIX_FADV_DONTNEED >> ${log} done < ${tmp} } create_cache_list before clear_cache create_cache_list after #rm ${tmp} ${log} exit 0
例えば postgresql の xlog のファイルキャッシュを削除するとして、こんな感じです。
$ sudo clear_cache.sh /var/lib/pgsql/data/pg_xlog/ before total cached size: 452,984,832 after total cached size: 0