私はinotifyウォッチを使用するアプリケーションを使用します。 既に設定済み
fs.inotify.max_user_watches=32768
/etc/sysctl.conf
でしたが、昨夜、手動で実行しない限り、アプリケーションはインデックス作成を停止しました。
この数を増やすとトレードオフが何であるかわからないため(RAMをより多く消費しますか?)、この数を増やすだけでよいかどうかわかりません。これらすべての時計を使用しているかどうか、そして時計を増やすためのトレードオフが何かを知ることができます。
-f
(フォロー)オプションを使用してtail
を開始します。 tail -f /var/log/dmesg
:tail: '/ var/log/dmsg'を見ることができません:デバイスにスペースが残っていません
好奇心のために:なぜtailは「テルテール」ですか?
strace tail -f ...
を試してください。成功すると、次で終了します:inotify_add_watch(4、 "/ var/log/dmesg"、IN_MODIFY ...) = 1
inotify_add_watch(4、 "/ var/log/dmesg"、IN_MODIFY ..) = -1 ENOSPC(デバイスにスペースが残っていない)
短い答え:確かに、汗はありません。必要に応じて50万(524288)に直行します。使用される追加メモリは、4GB以上のメモリを備えた最新のシステムでは無視できるはずです。
したがって、最大値を524288に設定し、すべてが使用された(ありそうにない)と仮定すると、約1を使用することになります。 256MB/512MBの32ビット/ 64ビットカーネルメモリ
最大値はいくらですか?理論的には、十分なRAMがあればどれもないと思います。実際には、524288 アプリによって公式に推奨されています 、そして人々は 2 million に設定され、もちろん、メモリ使用量。
max_user_watches
値に到達したかどうかを確認する簡単な方法は、ユーザーがパッケージinotify-tools
からinotifywatch
を使用し、ファイルから情報を収集できるかどうかを確認することです。
たとえば、inotifywatch -v /home/bruno/.profile
for meは以下を返します。
Establishing watches...
Total of 1 watches.
Finished establishing watches, now collecting statistics.
したがって、inotify
には新しい時計の作成に問題はなく、ここには問題がありません。
Inotifyウォッチの上限に達した場合、次のような結果が返されます。
Failed to watch /home/bruno/.profile; upper limit on inotify watches reached!
このようなものが表示される場合は、制限に達しているため、許可される時計の制限を増やす必要があります。
はい、そうです。しかし、これによると 古い記事 消費する量は、実行中のデスクトップの他の側面と比較して最小限です。
- メモリ使用量 -
Inotifyデータ構造は軽量です。
inotifyウォッチは40バイトですinotifyデバイスは68バイトですinotifyイベントは272バイトです
したがって、デバイスに8192個のウォッチがあると仮定すると、構造は320KBのメモリしか消費しません。一度に存在できるデバイスの最大数は8つですが、これはまだ2.5 MBのみです
各デバイスは、一度に256個のイベントをキューに入れることができます。これは、デバイスごとに合計で68KBになります。また、すべてのデバイスが開かれ、イベントキューがいっぱいになっている場合は、わずか0.5 MBです。
そのため、まれにすべてが開いていっぱいになると、約3 MBのメモリが使用されます。
各inotifyウォッチはメモリ内のディレクトリ/ファイルのiノードを固定します。iノードのサイズはファイルシステムごとに異なりますが、512バイトと仮定します。
したがって、グローバルウォッチの最大数がアクティブであると仮定すると、iノードキャッシュ内の32 MBのiノードが固定されます。ここでも、最新のシステムでは問題ありません。
もちろん、記事が書かれてから物事に大きな変化はなかったと思いますが、心配しない数値を見て、制限を増やしても_ RAMの消費はそれほど増えません。
inotify
に関する関連記事