7

Linux では、プロセスが開くことができる inotify インスタンスの数の制限は、/proc/sys/fs/inotify/max_user_instancesで指定されたユーザー ID ごとの最大数によって制限されます。

自然なことは、たとえばファイル FD のように、プロセスごとに制限することです。inotify FD はユーザー ID によって制限されているため、多くのプロセスが同じユーザー ID で実行される可能性があるサーバーでは、制限に達する可能性が高くなります。しかし、これには理由が必要だと思いますか?

コードでinotifyを使用する必要があり、システムに適切な制限を設定したいため、これはプログラミングに関する質問です。

4

1 に答える 1

13

その理由は、root以外のユーザーが、を使用して大量のファイルを監視することにより、システムをDoSするのを防ぐためですinotifyinotify構造体は、維持するために無視できない量のメモリを必要とするため(ディスクにスワップアウトすることはできません)、非特権がコミットできる量に制限が必要です。

epoll以前は同様の制限(max_user_instancesおよびmax_user_watches)がありましたが、最終的max_user_instancesには削除されmax_user_watches、メモリの4%に設定されました。

同様のパッチはおそらくinotifyに提出する必要がありますが、これまでのところ提出されていません。

ファイル記述子は、まったく異なる理由でプロセスごとに制限されます。プロセスが開始されると、ファイル記述子テーブルが割り当てられ、そのサイズはファイル記述子の最大許容数に比例します。これを可能な限り小さく保つことで、プロセスごとのメモリオーバーヘッドを削減します。

于 2012-09-03T16:13:54.280 に答える