我正在研究一个守护进程,它通过inotify监视文件事件,以便在访问文件时触发各种类型的事件.我读过手表有点贵,因为内核存储了每个被监视文件的完整路径名.
有多少手表会太多?
编辑:大多数情况下,我想知道..你有没有看到一个明显的性能影响,如果是这样,它发生了多少手表?是的,我必须监控/递归(但它是一个最小的自举系统).
AFAIK内核不存储路径名,而是存储inode.然而,32位系统上每个Watch有540个字节.在64位上加倍.
我知道从Lsyncd(也许你想检查出来?)有百万只手表的人.它只吃了一千兆字节的内存.
你可以通过读取/proc/sys/fs/inotify/max_user_instances
(最大的inotify"对象" /proc/sys/fs/inotify/max_user_watches
数量)和(观看的最大文件数)来找到系统限制,所以如果你超过这些数字,那就太多了;-)手表的最大数量通常是几万或更高 - 在我的系统上,262143 - 除非你试图观察文件系统中的每个文件,否则这可能比你需要的更多,但你不应该这样做.我会说,尽量不要使用比你需要的更多的inotify手表,除非你注意到性能的显着下降,否则不要担心.
我的信息:
[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使一些目录与灾难恢复服务器保持同步.
主服务器没有性能损失/惩罚.
可能,100亿数万亿的gazillions太多了.Kernel Korner - Inotify简介提到了"成千上万的手表",所以至少这个数字应该不是问题.