INotify max_user_instancesとmax_user_watchesの違いは正確に何ですか?

INotify max_user_instancesとmax_user_watchesの違いは正確に何ですか?

インターネットでいくつかの記事を読んだ後、INotifyの違いを少し理解できませんでした。最大ユーザーインスタンス数そして最大ユーザークロック数

Linuxの関係者から:

/proc/sys/fs/inotify/max_user_instances

これは、実際のユーザーIDごとに作成できるINotifyインスタンスの数の上限を指定します。

そして

/proc/sys/fs/inotify/max_user_watches

実際のユーザーIDごとに生成できるモニターの数の上限を指定します。

max_user_instancesこれは、複数のファイルシステムを監視でき、制限付きINotifyプロセスのインスタンスであることを意味しますかmax_user_watches

電子が正しい場合、実際にはどのように機能しますか?一部のファイルシステムを監視する必要があるすべてのプロセスがINotifyのユーザーインスタンスを作成しますか(ユーザーIDに関連しているため真ではないようです)。

現在の Amazon Ec2 インスタンスにデプロイした後、次のエラーが発生します。

 System.IO.IOException: The configured user limit (128) on the number of INotify instances has been reached.

私が正しく理解した場合、ファイルシステムの変更を監視するインスタンスがあまりにも多く生成されたことを意味しますか?原因は何ですか?

ベストアンサー1

「インスタンス」は、で表される単一のファイル記述子ですinotify_init()。単一のinotifyファイル記述子は、1つのプロセスで使用することも、複数のプロセスで共有することもできるため、プロセスではなくユーザーごとに割り当てられます。

「ウォッチ」は、inotify インスタンスで観察される単一のファイルです。各時計はユニークなので、ユーザーだけに制限されます。

アプリケーションがあまりにも多くのインスタンスを作成している場合は、プロセスが多すぎる(プロセス間でinotifyファイル記述子を共有しない)、単純なバグが発生します。たとえば、開いているinotify記述子が漏れている可能性があります(開いて忘れてしまう可能性があります)。 、閉じないで)。

もう1つの可能性は、1つの記述子で十分な場合にアプリケーションが正しく作成されず、複数の記述子を使用することです(1つ以上のinotify記述子がほとんど必要ありません)。

開かれたファイル記述子は procfs によってリストされます。

ls -al /proc/<application process number>/fd/

ディスクリプタに関するいくつかの追加情報はで見ることができます/proc/<PID>/fdinfo/<descriptor number>

おすすめ記事