如何解决以下问题?我正在使用指南针。
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:
检查
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
为我解决: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
对于 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
如其他评论中所述,您可以尝试查找无法与文件系统正常工作的应用程序。
但在某些情况下没关系,只有某些应用程序(在我的例子中是 Felix OSGI 缓存)打开的文件太多并且限制太低。
然后打开
/etc/security/limits.conf
并为用户或组添加限制行,即:
dmatej soft nofile 10000