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

Too many open files - Failed to initialize inotify: the user limit on the total number of inotify instances has been reached

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

   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'

这通常是 linux 配置问题。 Increase the number of files open/etc/security/limits.conf:

您似乎在使用 Mac OS,在这种情况下您应该使用 sysctl。 Add the following/etc/sysctl.conf:

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

对于Linux:

检查max_user_instances的当前值:

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

增加该值:

$ echo 256 > /proc/sys/fs/inotify/max_user_instances

为了使更改永久生效,在 /etc/sysctl.conf 中添加一行:

fs.inotify.max_user_instances = 256

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

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

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

dmatej          soft    nofile          10000

为我解决了: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