打开的文件太多 - 无法初始化 inotify:已达到 inotify 实例总数的用户限制

问题描述 投票:0回答:5

如何解决以下问题?我正在使用指南针。

   Too many open files - Failed to initialize inotify: the user limit on the total number of inotify instances has been reached.
    /home/rmack/Downloads/compass.app/lib/ruby/jruby/rb-inotify-0.9.5/lib/rb-inotify/notifier.rb:64:in `initialize'
    /home/rmack/Downloads/compass.app/lib/ruby/jruby/listen-1.3.1-patched/lib/listen/adapters/linux.rb:66:in `initialize_worker'
    /home/rmack/Downloads/compass.app/lib/ruby/jruby/listen-1.3.1-patched/lib/listen/adapter.rb:87:in `initialize'
    /home/rmack/Downloads/compass.app/lib/ruby/jruby/listen-1.3.1-patched/lib/listen/adapters/linux.rb:31:in `initialize'
    /home/rmack/Downloads/compass.app/lib/ruby/jruby/listen-1.3.1-patched/lib/listen/adapter.rb:226:in `works?'
    /home/rmack/Downloads/compass.app/lib/ruby/jruby/listen-1.3.1-patched/lib/listen/adapter.rb:190:in `usable_and_works?'
org/jruby/RubyEnumerable.java:1425:in `all?'
    /home/rmack/Downloads/compass.app/lib/ruby/jruby/listen-1.3.1-patched/lib/listen/adapter.rb:190:in `usable_and_works?'
    /home/rmack/Downloads/compass.app/lib/ruby/jruby/listen-1.3.1-patched/lib/listen/adapter.rb:57:in `select_and_initialize'
org/jruby/RubyArray.java:1613:in `each'
    /home/rmack/Downloads/compass.app/lib/ruby/jruby/listen-1.3.1-patched/lib/listen/adapter.rb:55:in `select_and_initialize'
    /home/rmack/Downloads/compass.app/lib/ruby/jruby/listen-1.3.1-patched/lib/listen/listener.rb:291:in `initialize_adapter'
    /home/rmack/Downloads/compass.app/lib/ruby/jruby/listen-1.3.1-patched/lib/listen/listener.rb:283:in `setup'
    /home/rmack/Downloads/compass.app/lib/ruby/jruby/listen-1.3.1-patched/lib/listen/listener.rb:65:in `start!'
    /home/rmack/Downloads/compass.app/lib/ruby/compass_1.0/sass-3.4.13/lib/sass/plugin/compiler.rb:405:in `listen_to'
    /home/rmack/Downloads/compass.app/lib/ruby/compass_1.0/sass-3.4.13/lib/sass/plugin/compiler.rb:338:in `watch'
    /home/rmack/Downloads/compass.app/lib/ruby/compass_1.0/compass-1.0.3/lib/compass/sass_compiler.rb:46:in `watch!'
    /home/rmack/Downloads/compass.app/lib/ruby/compass_1.0/compass-1.0.3/lib/compass/commands/watch_project.rb:41:in `perform'
file:/home/rmack/Downloads/compass.app/compass-app.jar!/app_watcher.rb:12:in `watch!'
file:/home/rmack/Downloads/compass.app/compass-app.jar!/ui/tray.rb:447:in `watch'
compass-sass inotify
5个回答
60
投票

对于 Linux

检查

max_user_instances
的当前值:

$ cat /proc/sys/fs/inotify/max_user_instances

增加该值:

$ echo 256 | sudo tee /proc/sys/fs/inotify/max_user_instances

为了使更改永久添加一行到

/etc/sysctl.conf

fs.inotify.max_user_instances = 256

6
投票

这通常是 linux 配置问题。 增加打开文件的数量

/etc/security/limits.conf

看起来你正在使用 Mac OS,在这种情况下你应该使用 sysctl。 将以下添加到

/etc/sysctl.conf

kern.maxfiles=your new value kern.maxfilesperproc=your new value

4
投票

为我解决:https://github.com/guard/rb-inotify/issues/23#issuecomment-22997846

# increase inotify file watch limit
ofile=/proc/sys/fs/inotify/max_user_instances
sudo sh -c "echo 8192 > $ofile"
cat $ofile
rerun app.rb

2
投票

对于 Ubuntu 22.04,它不起作用:

sudo sh -c 'echo 256 > /proc/sys/fs/inotify/max_user_instances'

为了临时改变它必须使用这个:

sudo sysctl fs.inotify.max_user_instances=8192

它确实像之前评论的那样工作:

获取当前值:

cat /proc/sys/fs/inotify/max_user_instances

为了永久保存,添加这一行:

fs.inotify.max_user_instances = 256

用这个命令:

sudo vi /etc/sysctl.conf

0
投票

如其他评论中所述,您可以尝试查找无法与文件系统正常工作的应用程序。

但在某些情况下没关系,只有某些应用程序(在我的例子中是 Felix OSGI 缓存)打开的文件太多并且限制太低。

然后打开

/etc/security/limits.conf
并为用户或组添加限制行,即:

dmatej          soft    nofile          10000
© www.soinside.com 2019 - 2024. All rights reserved.