Jor*_*tro 57 kernel files inotify
我使用了一个消耗 inotify 手表的应用程序。我已经设置了
fs.inotify.max_user_watches=32768
Run Code Online (Sandbox Code Playgroud)
在/etc/sysctl.conf
但昨晚的应用程序停止索引,除非我手动运行它,这使我怀疑我的手表了。
由于我不知道增加这个数字时的权衡是什么(它会消耗更多 RAM 吗?),我不知道我是否应该增加这个数字,所以我想知道是否有办法让我可以判断它是否正在使用所有这些手表以及增加它的权衡是什么。
ish*_*ish 73
tail
的-f
(follow) 选项开始,例如tail -f /var/log/dmesg
:
尾巴:无法观看“/var/log/dmsg”:设备上没有剩余空间
对于好奇:为什么tail是“telltail”?
strace tail -f ...
,当它成功时,它以:
inotify_add_watch(4, "/var/log/dmesg", IN_MODIFY...) = 1
inotify_add_watch(4, "/var/log/dmesg", IN_MODIFY..) = -1 ENOSPC(设备上没有剩余空间)
简短回答:当然,没有汗水。如果您愿意,可以直接使用 50 万 (524288)...使用的额外内存在具有 4GB 以上内存的现代系统上应该可以忽略不计。
因此,假设您将最大值设置为 524288,并且都使用了(不太可能),那么您将使用大约。256MB/512MB 的 32 位/64 位内核内存
最大值是多少?我想理论上没有,只要你有足够的内存。在实践中,524288已经被app官方推荐了,人们一直设置为200万,当然也伴随着内存使用。
Bru*_*ira 13
检查您是否达到您的max_user_watches
价值的简单方法是,与您的用户一起使用inotifywatch
, from the package inotify-tools
,并检查您是否仍然可以从文件中收集信息。
例如inotifywatch -v /home/bruno/.profile
对我来说返回:
Establishing watches...
Total of 1 watches.
Finished establishing watches, now collecting statistics.
Run Code Online (Sandbox Code Playgroud)
所以inotify
创建新手表没有问题,这里没有问题。
如果您已达到 inotify 手表的最大限制,它将返回类似
Failed to watch /home/bruno/.profile; upper limit on inotify watches reached!
Run Code Online (Sandbox Code Playgroud)
如果您看到类似这样的内容,那么您已达到限制,需要增加允许的手表限制。
是的,它确实。但是根据这篇旧文章,与正在运行的桌面的其他方面相比,它消耗的量很小。
- 内存使用情况 -
inotify 数据结构是轻量级的:
inotify 手表是 40 字节 inotify 设备是 68 字节 inotify 事件是 272 字节
所以假设一个设备有 8192 个手表,这些结构只会消耗 320KB 的内存。一次最多允许存在 8 个设备,这仍然只有 2.5 MB
每个设备还可以同时排队 256 个事件,总计为每个设备 68KB。如果所有设备都打开并且有一个完整的事件队列,则只有 0.5 MB。
因此,在极少数情况下所有内容都打开且已满的情况下,将使用大约 3 MB 的内存。
每个 inotify 监视都将内存中目录/文件的 inode 固定,每个文件系统的 inode 大小不同,但假设它是 512 个字节。
因此,假设最大数量的全局监视处于活动状态,这将在 inode 缓存中固定 32 MB 的 inode。在现代系统上再次不是问题。
我当然假设自文章撰写以来事情没有太大变化,但查看数字我不会担心并且增加限制不会增加太多 RAM 消耗。
inotify
归档时间: |
|
查看次数: |
52038 次 |
最近记录: |