web-dev-qa-db-ja.com

LinuxキャッシュRAMの削除

私は8 GBのRAMを備え、ファイル操作、グラフ作成、電子メール送信、フォーラムを行うかなり集中的なphpサイト(1サイト)を実行しているWebサーバーを使用しています。サーバーからのほとんどすべてのリクエストが新しいページまたは更新されたページを作成するため、RAMに何もキャッシュすることで得られるものはほとんどないと私は信じる環境に静的からはほど遠いです。また、クライアント側で多くのキャッシングが行われるため、画像、JavaScript、CSSの場合、大量の304リクエストがあります。

さらに、キャッシュされたRAMがディスクから読み取るのではなく確実に適切であるサーバー上のフラットファイルに書き込まれる言語ファイルがあります。しかし、このようなファイルはほんの一握りしかありません。

約2週間で、98%の無料RAMから4%の無料RAMに移行しました。これは、いくつかの大きなsvn更新をサーバーにプッシュしているときに発生しました。

私の質問は、次のコマンドを使用して定期的にキャッシュをクリアした場合(私はLinus Torvaldsのキャッシュに対する意識を知っている)、サーバーがより適切に調整されるかどうかです。

sync; echo 3 > /proc/sys/vm/drop_caches

または、次のファイルを編集したほうがよいでしょう。

/proc/sys/vm/swappiness  

デフォルト値の60を30に置き換えると、スワッピングが大幅に減少し、古いキャッシュの再利用が大幅に増えるはずです。

最初のコマンドを使用してすべてのキャッシュが解放されたことを確認するのは確かに良いことですが、これがデスクトップ環境に適していると言ったら、嘘をつきます。しかし、上で説明したようなWebサーバーについてはどうでしょうか。考え?

編集:私はシステムがキャッシュメモリからそれを必要とするときにメモリを獲得することを知っていますが、明確にするためにそれを指摘してくれてありがとう。ほとんどのサーバーメモリがキャッシュに格納されているときにApacheの速度が低下することを想像していますか?それはまったく別の問題ですか?

17
Patrick R

キャッシュをクリアするとパフォーマンスが低下しますが、効果はありません。 RAMが他の何かに必要だった場合、それは他の何かに使用されるため、クリアを実行した後しばらくの間、キャッシュヒット/ミスの比率を下げるだけです。

キャッシュ内のデータが非常に古くなっている(つまり、異常な操作中にキャッシュされたものである)場合、人為的に消去せずに、必要に応じて「新しい」データに置き換えられます。

sync; echo 3 > /proc/sys/vm/drop_cachesを実行する唯一の理由は、I/Oパフォーマンステストをいくつか試し、既知の状態から開始したい場合です(キャッシュ間の結果の違いを減らすために、実行間でキャッシュドロップを実行します)実行ごとにプライミングが異なります)。

RAM)がたくさんある場合でも、カーネルは数ページをスワップすることがあります。キャッシュ/バッファから要求を戻す可能性があり、swappiness設定を微調整すると、これにより、小さなメリットが見られる場合がありますが、キャッシュとバッファを意図的にクリアすることにより、一時的なパフォーマンスdropが見られる可能性があります。

16
David Spillett