web-dev-qa-db-ja.com

登録されているinotifyウォッチを確認するにはどうすればよいですか?

Inotifyの監視制限を1024に設定しています(デフォルトは128ですか?)。それにも関わらず、yeoman、Guard、Dropboxは常に失敗し、inotifyの制限を引き上げるように指示します。そうする前に、すべてのウォッチを消費しているものを知りたい(Dropboxにファイルがほとんどない)。

現在登録されているウォッチを確認するための/ procまたは/ sysの領域、または実行可能なツールはありますか?

39
frio

inotifyファイルシステムオプション

sysctl fs.inotify

開いたファイル

lsof | grep inotify | wc -l

このような値を増やします

  • sysctl -n -w fs.inotify.max_user_watches=16384
  • sysctl -n -w fs.inotify.max_user_instances=512
37
David Canós
  1. inotifyウォッチのデフォルトの最大数は8192です。 / proc/sys/fs/inotify/max_user_watchesに書き込むことで増やすことができます。
    sysctl fs.inotify.max_user_watchesを使用して、現在の値を確認できます。

  2. tail -fを使用して、OSがinotify最大監視制限を超えているかどうかを確認します。
    tail -fコマンドの内部実装は、inotifyメカニズムを使用してファイルの変更を監視します。
    inotifyウォッチを使い果たした場合、ほとんどの場合、このエラーが発生します。

    tail:inotifyは使用できません。ポーリングに戻ります:開いているファイルが多すぎます

  3. どのinotifyウォッチが登録されているかを調べるには、 this および this を参照します。試しましたが、理想的な結果が得られませんでした。 :

参照:
---(https://askubuntu.com/questions/154255/how-can-i-tell-if-i-am-out-of-inotify-watches

https://unix.stackexchange.com/questions/15509/whos-consuming-my-inotify-resources
https://bbs.archlinux.org/viewtopic.php?pid=1340049

15
zeekvfu

これはGoogleの結果で高いため、Unix/Linux StackExchangeに関する同様の質問から my answer の一部をコピーアンドペーストしています:

私はこの問題にぶつかりましたが、これらの答えのどれも「「各プロセスが現在使用しているwatches数は?」ワンライナーはすべて、開いているインスタンスの数を提供します。これは、ストーリーの一部にすぎません。トレースは、新しい時計が開かれているのを確認する場合にのみ役立ちます。

これにより、開いているinotifyインスタンスのリストと、それらが持っているウォッチの数の数を含むファイルが、pidとバイナリとともに取得されます。ウォッチカウントで降順に並べ替えて、それらを生成しました。

Sudo lsof | awk '/anon_inode/ { gsub(/[urw]$/,"",$4); print "/proc/"$2"/fdinfo/"$4; }' | while read fdi; do count=$(Sudo grep -c inotify $fdi); exe=$(Sudo readlink $(dirname $(dirname $fdi))/exe); echo -e $count"\t"$fdi"\t"$exe; done | sort -nr > watches

その大きな混乱が何をするのか、そしてその理由に興味があるなら、 元の答え について詳しく説明しました。

4
cincodenada

次の端末コマンドは、Ubuntu 16.04マシンで完璧に機能しました。

for foo in /proc/\*/fd/*; do readlink -f $foo; done |grep inotify |cut -d/ -f3 |xargs -I '{}' -- ps --no-headers -o '%p %U %a' -p '{}' |uniq -c |sort -n

私の問題は、HDDの大部分がSublime Textのフォルダーとしてロードされていたことです。の間に /opt/sublime_text/plugin_Host 8992および/opt/sublime_text/sublime_text、Sublimeには18のinotifyのインスタンスがありましたが、私のプログラムの残りはすべて1〜3でした。

Ionic Mobile App開発を行っていたため、Sublime設定の無視リストに大きなNode.jsフォルダー「node_modules」を追加することで、インスタンスの数を5減らしました。

"folder_exclude_patterns": [".svn", ".git", ".hg", "CVS", "node_modules"]

ソース: https://github.com/SublimeTextIssues/Core/issues/1195

3
brenthompson2

おもう

Sudo ls -l /proc/*/fd/* | grep notify

役に立つかもしれません。 inotify fdが登録されているPIDのリストを取得します。

これ以上の情報を得る方法がわかりません! HTH

3
Guido