在 Linux 中,进程可以打开的 inotify 实例数的限制受/proc/sys/fs/inotify/max_user_instances中指定的每个用户 ID 最大数的限制
自然的事情是限制每个进程,例如文件 FD。由于 inotify FD 受用户 ID 的限制,因此它更有可能达到服务器上的限制,许多进程可能以相同的用户 ID 运行。但我想这一定是有原因的?
这是一个编程问题,因为我必须在我的代码中使用 inotify 并希望为系统设置正确的限制。
在 Linux 中,进程可以打开的 inotify 实例数的限制受/proc/sys/fs/inotify/max_user_instances中指定的每个用户 ID 最大数的限制
自然的事情是限制每个进程,例如文件 FD。由于 inotify FD 受用户 ID 的限制,因此它更有可能达到服务器上的限制,许多进程可能以相同的用户 ID 运行。但我想这一定是有原因的?
这是一个编程问题,因为我必须在我的代码中使用 inotify 并希望为系统设置正确的限制。
原因是为了防止非 root 用户通过查看大量使用inotify
. inotify
结构需要不可忽略的内存量来维护(并且不能交换到磁盘),因此需要对非特权可以提交的数量进行一些限制。
epoll
曾经有类似的限制(max_user_instances
和max_user_watches
),尽管最后max_user_instances
被删除了,max_user_watches
只是设置为内存的 4%。
可能应该为 inotify 提交一个类似的补丁,但到目前为止还没有。
由于完全不同的原因,文件描述符在每个进程的基础上受到限制:当进程启动时,分配了一个文件描述符表,其大小与允许的最大文件描述符数成正比。保持这个尽可能小可以减少每个进程的内存开销。