web-dev-qa-db-ja.com

Linuxカーネルが使用するキャッシュを消去する方法

キャッシュがメモリを大量に消費し始めた後、Linuxカーネルにアプリケーションにより多くのメモリを割り当てさせたいです( 'free'の出力で確認できます)。

私は走った

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

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

28
Guss

vfs_cache_pressureを増やし、swappiness0に設定することもできます。

これを行うと、カーネルがキャッシュを再利用する速度が速くなり、ページアウトする対象を決定するときにプロセスに同等以上の優先順位が与えられます。

only気になるプロセスがディスクI/Oをほとんど行わない場合、これを実行できます。

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

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

そのため、キャッシュプレッシャーを増やす場合は、swappinessも同様に調整してください。

17
Tim Post

/ proc/meminfoの内容は、カーネルが何を使用するかを示しますRAMのために。

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

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

16
hillu

John Nilssonの私の質問への回答 キャッシュをパージして、それが問題に関連しているかどうかをテストするのに役立ちます。

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

唯一の本当の違いは1対3だと思いますが

15
Stephen Denne