我正在使用inotify监视文件事件的守护进程来访问文件时触发各种types的事件。 我已经读过手表有点贵,因为内核正在存储每个被监视文件的完整path名。
多less手表会太多?
编辑:主要是,我想知道..你有没有看到一个明显的性能打击,如果是的话,有多less手表发生了? 是的,我必须监视/recursion(但是它是一个最小的引导系统)。
AFAIK内核不存储路径名,但是inode。 不过,在32位系统上,每个手表有540个字节。 双倍于64位。
我知道从Lsyncd(也许你想检查一下吗?)拥有一百万手表的人。 它只吃了一个千兆字节的内存。
您可以通过读取/proc/sys/fs/inotify/max_user_instances
(最大数量的inotify“对象”)和/proc/sys/fs/inotify/max_user_watches
(所观察的最大文件数)来查找系统限制,这些数字太多了;-)手表的最大数量通常是几万或更高 – 在我的系统上,262143 – 这可能比你以前需要的更多,除非你想要观看每个文件文件系统,但你不应该这样做。 我会说,只是尽量不要使用更多的手表,而不必担心,除非你注意到性能的显着下降。
我的信息:
[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使某些目录与灾难恢复服务器保持同步。
在主服务器上没有性能损失/惩罚。
千亿亿次的巨石可能太多了。 内核Korner – 介绍inotify提到“成千上万的手表”,所以至少这个数字不应该是一个问题。