inotifywait 偷偷消耗大量内存

inotifywait secretely consumes a lot of memory

在 Ubuntu 14.04:

$ cat /proc/sys/fs/inotify/max_queued_events
16384
$ cat /proc/sys/fs/inotify/max_user_instances
128
$ cat /proc/sys/fs/inotify/max_user_watches
1048576

计算机重新启动后,我立即消耗了 1GB 的 RAM。 20-30 分钟后(只打开了 1 个终端)我使用了 6GB 内存 并且还在增长 ,但是 none 进程似乎使用了太多内存(根据 htoptop)。当我杀死 inotifywait 进程内存未被释放但停止增长。然后我重新启动了 PC,立即终止了 inotifywait,内存使用量停止在 1GB。

我有2个硬盘,一个是1TB,第二个是2TB。 inotifywait 是否以某种方式缓存了这些行为,或者通常它导致这种行为是否正常?

这是 the Linux disk cache at work,它不是 inotifywait 或其他任何内存泄漏。

我接受了之前的回答,因为它解释了发生了什么。但是,我对这个话题有一些想法。该页面基本上说的是“缓存不占用内存,因为这个内存可以随时收回,所以你不应该担心,你不应该恐慌,你应该感激不尽!”。好吧……我不是。我相信应该有一些体面但同时对缓存的硬限制。

这个过程背后的想法很好 -> “让我们不要浪费用户时间并缓存所有内容,直到我们有 space”。然而,这个过程在我的案例中实际上做的是浪费我的时间。目前我正在研究 Linux,它在虚拟机中是 运行。因为我打开了很多 jira 页面,许多桌面上有很多终端,打开了一些工具等等我不想每天都打开所有这些东西,所以我只是保存虚拟机状态而不是在结束时将其关闭那天。现在假设我的东西占用 4GB RAM。将发生的情况是,在我保存状态后 4GB 将写入我的硬盘驱动器,然后当我启动虚拟机时必须将 4GB 加载到 RAM 中。不幸的是,这只是理论。实际上,由于 inotifywait 会很高兴地填满我的 32 GB RAM,我不得不等待 8 倍的时间来保存和恢复虚拟机。是的,正如页面所说,我的 RAM“很好”,是的,我可以打开不同的应用程序,我不会遇到 OOM,但同时缓存正在浪费我的时间。

如果限制合适,假设 1GB 用于缓存,那么它就不会那么痛苦。我认为如果我将 VM 放在 HDD 而不是 SSD 上,则需要永远保存状态,我可能根本不会使用它。