How do I find out what inotify watches have been registered?

前端 未结 7 2056
渐次进展
渐次进展 2021-01-30 05:14

I have my inotify watch limit set to 1024 (I think the default is 128?). Despite that, yeoman, Guard and Dropbox constantly fail, and tell me to up my inotify limit. Before do

7条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-01-30 05:47

    I already answered this in the same thread on Unix Stackexchange as was mentioned by @cincodenada, but thought I could repost my ready-made answer here, seeing that no one really has something that works:


    I created a premade script, inotify-consumers, which is pretty fast (< 0.1 sec), that lists the top offenders for you:

    $ inotify-consumers  
    
       INOTIFY
       WATCHER
        COUNT     PID     CMD
    ----------------------------------------
        6688    27262  /home/dvlpr/apps/WebStorm-2018.3.4/WebStorm-183.5429.34/bin/fsnotifier64
         411    27581  node /home/dvlpr/dev/kiwi-frontend/node_modules/.bin/webpack --config config/webpack.dev.js
          79     1541  /usr/lib/gnome-settings-daemon/gsd-xsettings
          30     1664  /usr/lib/gvfs/gvfsd-trash --spawner :1.22 /org/gtk/gvfs/exec_spaw/0
          14     1630  /usr/bin/gnome-software --gapplication-service
    

    Here you quickly see why the default limit of 8K watchers is too little on a development machine, as just WebStorm instance quickly maxes this when encountering a node_modules folder with thousands of folders. Add a webpack watcher to guarantee problems ...

    Just copy the contents of the script (or the file on GitHub) and put it somewhere in your $PATH, like /usr/local/bin. For reference, the main content of the script is simply this

    find /proc/*/fd \
        -lname anon_inode:inotify \
        -printf '%hinfo/%f\n' 2>/dev/null \
        \
        | xargs grep -c '^inotify'  \
        | sort -n -t: -k2 -r 
    

    In case you are wondering how to increase the limits, here's how to make it permanent:

    echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
    

提交回复
热议问题