inotifyの時計がなくなっているかどうかを確認するにはどうすればよいですか?


47

私はinotifyウォッチを使用するアプリケーションを使用します。私がしましすでに設定します

fs.inotify.max_user_watches=32768

/etc/sysctl.conf、私は手動でそれを実行した場合を除きますが、最後の夜のアプリケーションは、私は時計の出だ疑いにつながる、インデックス作成を停止しました。

この数を増やすとトレードオフが何であるかわからないので(RAMをより多く消費しますか?)、この数を増やすだけでよいかどうかわかりません。これらすべての時計を使用しているかどうかと、時計を増やすためのトレードオフが何かを判断できます。


18.04で、iノードのウォッチがなくなった場合に画面をロック解除できないことが判明したため、この質問は再び非常に重要になりました。
カスペルド

回答:


64

あなたが時計を失っていることをどのように知っていますか?が教えてくれます!

  • 古いファイルtail-f(フォロー)オプションで開始します。例tail -f /var/log/dmesg
    • すべてが順調であれば、最後の10行を表示して一時停止します。Ctrl-Cで中止
    • 場合あなたは時計の出ている、それはこれで失敗しますやや不可解なエラー
      tail: '/ var / log / dmsg'を見ることができません:デバイスにスペースが残っていません

好奇心For 盛な人のために:なぜは「テルテール」なのですか?

  • 実際には、任意の よく書かれたアプリは、以来、あなたを伝えるの好意を持っている必要がありinotifyの APIは、/取引が何であるか、それらを伝える明確に呼び出します。
  • 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以上のメモリを搭載した最新のシステムでは、使用される追加メモリごくわずかです。

  • 使用 [:ソース- inotifyを時計は、540バイト(32ビットシステム)、または1キロバイト(64ビットダブル)占め12 ]
  • これはカーネルメモリから発生し、スワップ不可です。
  • したがって、最大値を524288に設定し、すべてが使用された(ありそうにない)と仮定すると、おおよその値を使用することになります。256MB / 512MBの32ビット/ 64ビットカーネルメモリ

    • アプリケーションは追加のメモリも使用して、inotifyハンドル、ファイル/ディレクトリパスなどを追跡することに注意してください。その量は設計に依存します。
  • 最大値はいくらですか?理論的には、十分なRAMがあればどれもないと思います。実際には、アプリによって 524288 が公式に推奨されており、人々はもちろん200万に設定し、それに伴うメモリ使用量も合わせて設定しています


5
あなたものinotify時計の実際の現在の数(これより後、はい/いいえ)を知りたい場合は、のために行くsudo lsof | grep -i inotify | wc -l
フランクNocke

2
「well-written-app」リンクが壊れています。
ガウラフシャルマ

11

この数を増やす必要があるかどうかわかりません

ユーザーがmax_user_watches値に達したかどうかを確認する簡単な方法はinotifywatch、パッケージからを使用inotify-toolsし、ファイルからまだ情報を収集できるかどうかを確認することです。

たとえばinotifywatch -v /home/bruno/.profile、私が返します:

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!

このようなものが表示される場合は、制限に達しているため、許可される監視制限を増やす必要があります。

より多くのRAMを消費しますか?

はい、そうです。しかし、この古い記事によると、それが消費する量は、実行中のデスクトップの他の側面と比較して最小限です。

- メモリ使用量 -

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


申し訳ありませんが、昨日ドラフトを数時間開いていましたが、私の投稿前にあなたの答えが見つかりませんでした。彼らは2つの異なるアプローチを持っているので大丈夫だと思います:-)最近のカーネルでは、inotifyはウォッチごとに0.5KB(32ビット)または1KB(64ビット)のカーネルメモリを使用していることを明確にできますか? 2005年はもう真実ではないようです?
ISH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.