キャッシュがメモリを大量に消費し始めた後、Linuxカーネルにアプリケーションにより多くのメモリを割り当てさせたいです( 'free'の出力で確認できます)。
私は走った
Sudo sync; Sudo sysctl -w vm.drop_caches=3; free
(ディスクdentry/inodeキャッシュとページキャッシュの両方を解放するため)と、使用されたキャッシュの約半分だけが解放されたことがわかります-残りは残ります。残りのキャッシュを占有しているものを確認して、強制的に解放するにはどうすればよいですか?
vfs_cache_pressure
を増やし、swappiness
を0
に設定することもできます。
これを行うと、カーネルがキャッシュを再利用する速度が速くなり、ページアウトする対象を決定するときにプロセスに同等以上の優先順位が与えられます。
only気になるプロセスがディスクI/Oをほとんど行わない場合、これを実行できます。
ネットワークI/Oにバインドされたプロセスが要求を処理するためにスワップインする必要がある場合、それは問題であり、本当の解決策は、競争力の低いサーバーに配置することです。
デフォルトのswappiness
設定では、カーネルはほとんど常に、実際のメモリにFS関連するキャッシュを保持することを優先します。
そのため、キャッシュプレッシャーを増やす場合は、swappiness
も同様に調整してください。
/ proc/meminfoの内容は、カーネルが何を使用するかを示しますRAMのために。
/ proc/sys/vm/vfs_cache_pressureを使用して、カーネルにファイルシステム関連のキャッシュに使用されるメモリをより遅延させたり、積極的に再利用させたりすることができます。
アプリケーションがディスクI/Oをほとんどまたはまったく行わない場合にのみ、このパラメーターを調整することでメリットが得られることに注意してください。
John Nilssonの私の質問への回答 キャッシュをパージして、それが問題に関連しているかどうかをテストするのに役立ちます。
sync && echo 1 > /proc/sys/vm/drop_caches
唯一の本当の違いは1対3だと思いますが