AWS S3(及びその互換オブジェクトストレージ)をLinuxのファイルシステムとしてマウントできるgoofysはなかなか重宝します。
goofysのインストール、設定についてはqiita内にいい記事がいくつもあるのでそれを参照してください。
しかし、気がつくとgoofysがこんな風に結構なメモリを掴みっぱなしになることがあります。
8960 ******* 20 0 872988 378244 11384 S 0.0 18.5 0:35.59 goofys
上記は自分の使っているサーバーでの実例ですが、goofysが400MB弱のメモリを掴んでいました。umount/mountすると一度20MB程度まで減るのですが、暫く経つとまたこうなります。
犯人はupdatedb
Ubuntuを普通にインストールすると、ファイル検索を高速化するためのupdatedbが日に一回実行されるように設定されます。これがgoofysでマウントされたディレクトリツリーについても探索するため、ディレクトリ構造によっては大量のメモリを消費してしまいます(そして残念なことに開放されない)。
そこで、updatedbの探索範囲からgoofysでマウントしている部分を除外する設定を行います。
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs f#use.sshfs curlftpfs ecryptfs fusesmb devtmpfs fuse fuse.goofys"
PRUNEFSで探索から除外するファイルシステムを指定するので、この末尾に"fuse fuse.goofys"を追記しています(fuseだけでいけると思いますが念の為)。
もしくは、goofysのマウントポイントをPRUNEPATHSに追記します。
(ファイル探しにlocateコマンドを使わないなら、/etc/cron.daily/mlocate
を削除してupdatedbの実行自体を止めるのもありです)
これで何日経ってもgoofysのメモリ消費はほぼ増えなくなります。
そもそも、
goofysでのmount時にallow_otherを指定せず単一のユーザーからだけ見えるようにしておけば、rootでマウントを実行していない限りupdatedbから見えないんですけどね。そこは諸般の事情で。