28

キャッシュが大量のメモリを消費し始めた後 (「free」の出力でわかるように)、Linux カーネルがアプリケーションにより多くのメモリを割り当てるように強制したいと考えています。

私は走った

sudo sync; sudo sysctl -w vm.drop_caches=3; free

(ディスク dentry/inode キャッシュとページ キャッシュの両方を解放するため)、使用されているキャッシュの約半分だけが解放されていることがわかります。残りは残ります。残りのキャッシュを占有しているものを特定し、強制的に解放するにはどうすればよいですか?

4

3 に答える 3

18

vfs_cache_pressureに設定swappinessするだけでなく、増やすこともでき0ます。

そうすることで、カーネルがキャッシュをより速く再利用できるようになり、ページアウトされるものを決定する際にプロセスが同等またはそれ以上の優先度を与えられます。

関心のあるプロセスがディスク I/O をほとんど行わない場合にのみ、これを実行することをお勧めします。

要求を処理するためにネットワーク I/O バウンド プロセスをスワップインする必要がある場合、それは問題であり、実際の解決策は、競合性の低いサーバーに配置することです。

デフォルトswappiness設定では、カーネルはほとんどの場合、FS 関連のキャッシュを実メモリーに保持することを優先します。

そのため、キャッシュ プレッシャを増やす場合は、必ず均等に調整してくださいswappiness

于 2009-03-28T02:17:25.637 に答える
17

/proc/meminfoの内容は、カーネルが RAM を使用する目的を示しています。

/proc/sys/vm/vfs_cache_pressureを使用して、カーネルがファイルシステム関連のキャッシュに使用されるメモリをより遅延または積極的に再利用するように強制できます。

アプリケーションがディスク I/O をほとんどまたはまったく行わない場合にのみ、このパラメーターを調整することでメリットが得られることに注意してください。

于 2009-03-01T12:44:18.710 に答える
15

あなたの問題に関連しているかどうかをテストするためにキャッシュをパージするのに役立つ、私の質問に対するジョン・ニルソンの答えが見つかるかもしれません。

sync && echo 1 > /proc/sys/vm/drop_caches

本当の違いは1対3だけだと思う​​けど

于 2009-03-25T10:00:38.387 に答える