Synology NAS /proc/sys/fs/inotify/max_user_watches のチューニング

inotify

inotify はファイルやディレクトリへの読み書きイベントを監視するための機構を提供します。Linuxカーネル2.6.13から追加された機能で、LinuxをベースとするDSMでも動作しています。

/proc/sys/fs/inotify/max_user_watches

inotify による監視対象数の上限を設定するパラメタです。

/proc インターフェース

以下のインターフェースは、inotify で消費される カーネルメモリーの総量を制限するのに使用できる:

/proc/sys/fs/inotify/max_user_watches

作成可能な監視対象の数の実 UID 単位の上限を指定する。

JM Project – Linux Programmer’s Manual (7) INOTIFY

パラメタ不足時のトラブルケース

cAdvisor

当方の環境ではDockerコンテナのモニタリングツール :cAdvisor の導入時に、 cAdvisor が起動時エラーで動作しない問題が発生しました。

調査の結果、同様のトラブルが cAdvisor の Issues にも登録されていたので、同パラメタが不足しての問題であると気付きました。

cAdvisor – Issues with cadvisor on Synology NAS #1846

Synoindex Watcher

README の QAに 同パラメタによるトラブルが記載されています。

Synoindex Watcher – README > QA > I’m getting OSError: [Errno 28] No space left on device

パラメタの変更

通常であれば /etc/sysctl.conf を更新し sysctl -p で設定をリロードすれば、以降は(再起動しても)変更値が適用されるのですが、 Synology NASの場合、DSMの更新時にファイルが上書きされる場合があります。また、 自作rc.dスクリプトを用意しても /usr/local/etc/rc.d/ 配下がリセットされる可能性もあります。

このため、 DSMのタスクスケジューラにパラメタ変更コマンドを登録し、ブートアップ時に自動起動します。

[コントロール パネル] > [タスクスケジューラー]  >  [作成] – [トリガーされたタスク] – [ユーザー指定のスクリプト]

  • タスク: max_user_watches (任意)
  • ユーザー:root
  • イベント:ブートアップ
  • ユーザー指定のスクリプト:/volume1/extensions/scripts/max_user_watches.sh

ユーザー指定のスクリプト欄に「echo 204800 > /proc/sys/fs/inotify/max_user_watches」を直接設定しても問題ありませんが、当方は外部ファイルで管理できるようにシェルスクリプトを作成しています。

#!/bin/sh

echo 204800 > /proc/sys/fs/inotify/max_user_watches

参考情報

Synology Cmunity – Setting fs.inotify.max_user_watches values – Keeps resetting