はじめに
さくらのVPS 512のFreeBSDでZFSを使ってますが、動作しているプロセスでメモリ使用量が高いものはないにもかかわらずメモリ使用率が高く、どうもZFSがメモリを多量に消費してswapが多発いるようでした。
その際に対応した内容を記載します。
カーネルとZFSのメモリパラメータの見直し
カーネルに割り当てるメモリと ZFS のキャッシュに割り当てるメモリの2つを調整します。
カーネルパラメータの見直し
1GBの物理メモリがある状態では、FreeBSDのカーネルに割り当てられるメモリはデフォルトでは以下でした。
> sysctl -a | grep vm.kmem_size
vm.kmem_size_scale: 1
vm.kmem_size_max: 1319413950874
vm.kmem_size_min: 0
vm.kmem_size: 1017532416
カーネルに割り当てるメモリとその最大値を物理メモリを超えない範囲で設定しておきます。いろいろ状態を見ながら、以下のように/boot/loader.conf
へ追記しました。
vm.kmem_size="330M"
vm.kmem_size_max="512M"
ZFSのメモリチューニング
ZFSのARCに割り当てられるメモリはデフォルトでは以下でした。
vfs.zfs.arc_min: 79494720
vfs.zfs.arc_max: 635957760
ZFS ARCに割り当てるメモリの最大値とキャッシュに割り当てるサイズを調整しておきます。いろいろ状態を見ながら、以下のように/boot/loader.conf
へ追記しました。
vfs.zfs.arc_max="64M"
vfs.zfs.vdev.cache.size="4M"
一般的な設定
最後にZFSの一般的な以下の設定を/boot/loader.conf
へ追記しました。
vfs.zfs.prefetch_disable="1"
vfs.zfs.txg.timeout="5"
kern.maxvnodes="250000"
vfs.zfs.write_limit_override="1073741824"
おわりに
今のところこれでだいぶ安定していますが、しばらく状態を見ながら必要に応じてパラメータをいじっていこうと思います。