无法创建 fsnotify 观察者:打开的文件太多

无法创建 fsnotify 观察者:打开的文件太多

我在尝试跟踪 Kubernetes pod 的日志时收到此错误。

failed to create fsnotify watcher: too many open files

答案1

我能够通过在我的服务器上运行这些命令来解决这个问题。这可能需要监视每个文件,但它可以解决您的问题。您可能还想找出为什么有这么多文件被监视。

sudo sysctl -w fs.inotify.max_user_watches=2099999999
sudo sysctl -w fs.inotify.max_user_instances=2099999999
sudo sysctl -w fs.inotify.max_queued_events=2099999999

答案2

考虑到我的系统上的系统默认设置(TrueNAS SCALE),在使用 ChatGPT 进行调查后,我使用此脚本以一致的方式增加值:

# System defaults for comparison
default_max_user_instances = 128
default_max_queued_events = 16384
default_max_user_watches = 8192

# Total available memory in KB for the inotify settings
available_memory_kb = 2 * 1024 * 1024  # 2 GB in KB

# Calculate the total "weight" based on default values to keep the same ratio
total_weight = default_max_user_watches + default_max_user_watches + default_max_user_watches

# Calculate how much memory each "unit" represents
memory_per_unit = available_memory_kb / total_weight

# Allocate memory based on the original ratio
print("fs.inotify.max_user_watches =", int(memory_per_unit * default_max_user_watches))
print("fs.inotify.max_user_instances =", int(memory_per_unit * default_max_user_instances))
print("fs.inotify.max_queued_events =", int(memory_per_unit * default_max_queued_events))

推理:每个 inotify 监视大约 1KB 的内存使用量估计是一个一般近似值,并且可能根据架构(32 位与 64 位)和特定内核实现而略有不同。

相关内容