如何设置和理解 fs.notify.max_user_watches

cca*_*ert 39 linux sysctl

我不明白设置的最佳方法fs.inotify.max_user_watchessysctl。事实上,除了我需要设置特定进程可以查看的文件数量这一事实之外,我对这里发生的事情并不了解。

我相信我可以通过运行以下命令查看最大用户数:

cat /proc/sys/fs/inotify/max_user_watches
Run Code Online (Sandbox Code Playgroud)

我的理解是,有些人建议/proc/sys/fs/inotify/max_user_watches通过/etc/sysctl.conf在编辑器中打开并将其添加到其中来进行更改:

fs.inotify.max_user_watches=524288
Run Code Online (Sandbox Code Playgroud)

然后运行sudo sysctl -p- 大概 - 处理对文件所做的更改。

其他人建议运行这样的命令:

sudo sysctl -w fs.inotify.max_user_instances=1024
sudo sysctl -w fs.inotify.max_user_watches=12288
Run Code Online (Sandbox Code Playgroud)

我知道这-w代表 write,但是正在写什么,写在哪里?只是这个命令改变了/proc/.../max_user_watches吗?

上面概述的两种方法中哪一种最好?我知道524288和12288是不同的数字,但是我不明白运行-p-w.

Ste*_*itt 43

sysctl -w将内核参数值写入 下的相应键/proc/sys

sudo sysctl -w fs.inotify.max_user_watches=12288
Run Code Online (Sandbox Code Playgroud)

12288/proc/sys/fs/inotify/max_user_watches。(这不是等价的,正是这样;感兴趣的读者可以strace自己看看。)

sysctl -p
Run Code Online (Sandbox Code Playgroud)

从文件中加载设置/etc/sysctl.conf(默认)或在-p.

除了它们写入的参数和值的不同来源之外,这两种方法之间的区别在于,-w仅在下次重新启动之前更改参数,而/etc/sysctl.conf每次系统启动时都会再次应用存储在其中的值。我通常的方法是使用-w来测试值,然后一旦我确定新设置没问题,就将它们写入/etc/sysctl.conf或下的文件/etc/sysctl.d(通常是/etc/sysctl.d/local.conf)。

sysctlsysctl.conf手册页(man sysctlman sysctl.conf对细节您的系统上)。

  • 我在运行 Node/NextJS 服务器来为应用程序提供服务时遇到了一个问题。该错误表示达到与文件观察者相关的限制。在互联网上闲逛后,我得到了使用 `fs.inotify.max_user_watches=524288` 的东西。您是否知道进行此更改的不利方面是我应该关注的? (5认同)
  • @Noel你可能会[内存不足](https://www.kernel.org/doc/html/latest/admin-guide/sysctl/fs.html#max-user-watches),但这极不可能(并且在此之前你会遇到其他问题)。 (3认同)
  • @dez93_2000 是的,或者更好的是`/etc/sysctl.d/local.conf`。 (2认同)

小智 7

find /proc/*/fd -lname anon_inode:inotify |
   cut -d/ -f3 |
   xargs -I '{}' -- ps --no-headers -o '%p %U %c' -p '{}' |
   uniq -c |
   sort -nr
Run Code Online (Sandbox Code Playgroud)

查看使用的 inotify 计数。