我在尝试跟踪 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 位)和特定内核实现而略有不同。