gregghz / Watcher

Watcher is a daemon that watches specified files/folders for changes and fires commands in response to those changes. It is similar to incron, however, configuration uses a simpler to read yaml file instead of a plain text file. It's also written in Python, making it easier to hack.
MIT License
245 stars 129 forks source link

OSError: Cannot initialize new instance of inotify, Errno=Too many open files (EMFILE) #23

Open MikhailKasimov opened 5 years ago

MikhailKasimov commented 5 years ago

Hello!

Have got such multiple trace in server's log:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/threading.py", line 812, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/site-packages/pyinotify.py", line 1511, in run
    self.loop()
  File "/usr/lib/python2.7/site-packages/pyinotify.py", line 1497, in loop
    self.process_events()
  File "/usr/lib/python2.7/site-packages/pyinotify.py", line 1295, in process_events
    self._default_proc_fun(revent)
  File "/usr/lib/python2.7/site-packages/pyinotify.py", line 937, in __call__
    return _ProcessEvent.__call__(self, event)
  File "/usr/lib/python2.7/site-packages/pyinotify.py", line 662, in __call__
    return meth(event)
  File "/root/Watcher/watcher.py", line 247, in process_IN_CREATE
    self.runCommand(event)
  File "/root/Watcher/watcher.py", line 227, in runCommand
    prefix)
  File "/root/Watcher/watcher.py", line 300, in addWatch
    wm = pyinotify.WatchManager()
  File "/usr/lib/python2.7/site-packages/pyinotify.py", line 1747, in __init__
    raise OSError(err % self._inotify_wrapper.str_errno())
OSError: Cannot initialize new instance of inotify, Errno=Too many open files (EMFILE)

Need some hint on further investigation here. Thanks!

gregghz commented 5 years ago

It would probably be useful to figure out what open files are on your server (I would google this problem for your specific platform -- there are ways to increase the limit on linux, but it might be distro dependent).

Posting your config for watcher would be helpful too.

andygikling commented 3 years ago

This is a common problem on Linux systems in my experience. You can just sidestep it. But @gregghz has an important point - you should understand why you're out of inotify handles.

https://stackoverflow.com/questions/32281277/too-many-open-files-failed-to-initialize-inotify-the-user-limit-on-the-total

or

$ cat /proc/sys/fs/inotify/max_user_instances $ sudo sh -c "echo 8192 > /proc/sys/fs/inotify/max_user_instances"

apton-marimanohar commented 2 years ago

This is a common problem on Linux systems in my experience. You can just sidestep it. But @gregghz has an important point - you should understand why you're out of inotify handles.

https://stackoverflow.com/questions/32281277/too-many-open-files-failed-to-initialize-inotify-the-user-limit-on-the-total

or

$ cat /proc/sys/fs/inotify/max_user_instances $ sudo sh -c "echo 8192 > /proc/sys/fs/inotify/max_user_instances"

@andygikling its working now