我正在研究一个守护进程,该守护进程通过inotify监视文件事件,以便在访问文件时触发各种类型的事件。我读过手表有点贵,因为内核存储了每个被监视文件的完整路径名。
有多少手表会太多?
编辑:大多数情况下,我想知道..你有没有看到过明显的性能影响,如果有的话,有多少手表发生了?是的,我必须监控/递归(但它是一个最小的自举系统)。
答案 0 :(得分:24)
您可以通过阅读/proc/sys/fs/inotify/max_user_instances
(最大inotify“对象数”)和/proc/sys/fs/inotify/max_user_watches
(观看的最大文件数)来查找系统限制,因此如果超过这些数字,则数量过多; - )手表的最大数量通常是几万或更高 - 在我的系统上,262143 - 这可能比你需要的更多,除非你试图在文件系统中观察每个文件,但你不应该'这样做。我会说,只是尽量不要使用比你需要的更多的inotify手表,除非你注意到性能的显着下降,否则不要担心它。
答案 1 :(得分:22)
AFAIK内核不存储路径名,而是存储inode。然而,32位系统上每个Watch有540个字节。在64位上加倍。
我从Lsyncd知道(也许你想检查一下?)拥有一百万只手表的人。它只吃了一千兆字节的内存。
答案 2 :(得分:9)
我的信息:
[foo@caffeine ~]# cat /var/log/lsyncd.status | grep Inotify
Inotify watching 293208 directories
[foo@caffeine ~]# cat /proc/sys/fs/inotify/max_user_watches
1048576
lsyncd使用大约130M的内存。
我使用lsyncd使某些目录与灾难恢复服务器保持同步。
主服务器没有性能损失/惩罚。
答案 3 :(得分:5)
可能有100亿亿万亿的gazillions太多了。 Kernel Korner - Intro to inotify提到“成千上万的手表”,所以至少这个数字应该不是问题。
答案 4 :(得分:5)
/proc/sys/fs/inotify/max_user_watches
是当前最大观看次数每位用户。
从历史上看,内核默认为 8192,但鉴于许多 Linux 发行版对其内核构建进行了相当多的定制,这可能并非在每个 Linux 系统上都是如此。最近的内核更改 [1] 根据系统具有的 RAM 大小动态选择范围 [8192, 1048576] 中的默认 max_user_watches
值。 (5.11 是第一个包含此更改的内核版本。)
AFAICT,root
可以将 max_user_watches
更改为 2147483647 (231-1) 或以下的任何值,只要您确信自己有足够的 RAM支持该数量的手表。
[1] https://github.com/torvalds/linux/commit/92890123749bafc317bbfacbe0a62ce08d78efb7
答案 5 :(得分:2)
这取决于你有多少公羊
虽然524288是可以观看的最大文件数,但如果您处于特别受内存限制的环境中,您可能希望降低该数量。每个文件监视占用540字节(32位)或~1kB(64位),因此假设所有524288手表都被消耗,导致上限约为256MB(32位)或512MB(64位)