在网上读了一些文章后,我有点不明白INotify,max_user_instances和max_user_watches之间的区别。
来自官方的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有关)?
目前,在亚马逊Ec2实例上部署之后,出现了如下错误:
System.IO.IOException: The configured user limit (128) on the number of INotify instances has been reached.
如果我正确理解的话,创建的实例太多了,它们正在监视文件系统的更改吗?原因是什么?
发布于 2019-07-30 01:22:23
“实例”是由inotify_init()
返回的单个文件描述符。一个inotify文件描述符可以由一个进程使用,也可以由多个进程共享,因此它们是按用户配给的,而不是每个进程。
"watch“是一个文件,由inotify实例观察。每只手表都是独一无二的,所以它们也是按用户配给的.
如果一个应用程序创建了太多的实例,它要么启动太多的进程(并且在进程之间不共享inotify文件描述符),要么它只是简单的buggy -例如,它可能泄漏打开的inotify描述符(打开,然后在不关闭的情况下忘记它们)。
还有一种可能性,就是应用程序编写得很糟糕,并且使用了多个描述符,其中一个描述符就足够了(您几乎永远不需要超过一个inotify描述符)。
打开的文件描述符可以通过procfs列出:
ls -al /proc/<application process number>/fd/
在/proc/<PID>/fdinfo/<descriptor number>
中可以看到一些关于描述符的额外信息。
https://unix.stackexchange.com/questions/532709
复制相似问题