54

私は、inotifyを介してファイルイベントを監視し、ファイルにアクセスしたときにさまざまなタイプのイベントをトリガーするデーモンに取り組んでいます。カーネルは監視対象のすべてのファイルのフルパス名を格納しているため、監視は少し高価であることを読みました。

時計が多すぎるのはいくつですか?

編集:ほとんどの場合、私は疑問に思っています..目立ったパフォーマンスのヒットを見たことがありますか?もしそうなら、それは何台の時計で起こりましたか?はい、監視/再帰的に行う必要があります(ただし、最小限のブートストラップシステムです)。

4

6 に答える 6

34

私の知る限り、カーネルはパス名ではなく inode を保存しています。それでも、32 ビット システムではウォッチごとに 540 バイトあります。64bitなら2倍。

私は Lsyncd (多分あなたはそれをチェックしたいですか?) から何百万もの時計を持っている人を知っています. ギガバイトのメモリを消費するだけです。

于 2011-08-17T11:14:08.643 に答える
25

/proc/sys/fs/inotify/max_user_instances(inotify「オブジェクト」の最大数) と(監視されたファイルの最大数) を読み取ることでシステムの制限を見つけることができるので、/proc/sys/fs/inotify/max_user_watchesこれらの数を超えると多すぎます;-) 監視の最大数は通常数万です。以上 - 私のシステムでは 262143 - ファイル システム内のすべてのファイルを監視しようとしない限り、これはおそらく必要以上のものですが、そうすべきではありません。必要以上に inotify ウォッチを使用しないようにしてください。パフォーマンスの大幅な低下に気付かない限り、心配する必要はありません。

于 2009-02-11T07:39:25.110 に答える
13

/proc/sys/fs/inotify/max_user_watchesは、ユーザーごとの現在の最大視聴数です。

歴史的に、カーネルはこれを 8192 にデフォルト設定していましたが、多くの Linux ディストリビューションがカーネル ビルドをかなりカスタマイズしていることを考えると、これはすべての Linux システムに当てはまるとは限りません。最近のカーネルの変更 [1]max_user_watchesでは、システムの RAM の量に基づいて [8192, 1048576] の範囲でデフォルト値が動的に選択されます。(5.11 は、この変更を含む最初のカーネル リリースです。)

AFAICT は、2147483647 (2 31root -1) 以下の任意の値に変更できます。ただし、その数の時計をサポートするのに十分な RAM があると確信している場合に限ります。max_user_watches

[1] https://github.com/torvalds/linux/commit/92890123749bafc317bbfacbe0a62ce08d78efb7

于 2021-04-20T02:56:22.873 に答える
10

私の情報:

[foo@caffeine ~]# cat /var/log/lsyncd.status | grep Inotify
Inotify watching 293208 directories

[foo@caffeine ~]# cat /proc/sys/fs/inotify/max_user_watches
1048576

lsyncd は約 130M のメモリを使用します。

lsyncd を使用して、いくつかのディレクトリをディザスタ リカバリ サーバーと同期させます。

メインサーバーでのパフォーマンスへの影響やペナルティはありません。

于 2012-08-10T21:49:02.650 に答える
4

おそらく、1,000億兆兆兆は多すぎるでしょう。Kernel Korner-inotifyのイントロは「何千もの時計」に言及しているので、少なくともその数は問題にならないはずです。

于 2009-02-11T07:35:37.053 に答える