web-dev-qa-db-ja.com

システムがキャッシュを大量に使用するのはなぜですか?

以前は、Ubuntu 14.04を実行しているデスクトップコンピューターに4GBのRAMがありましたが、これで十分だと思いました。ただし、しばらく使用した後、私のコンピューターは遅くなるようです。 Gnomeパネルにシステムリソースモニターアプリがあります。これは利用可能なRAM(?)を表していると思います。濃い緑色の領域は「メモリ」として、淡い緑色の領域は「キャッシュ」として表示されます。 「キャッシュ」は、グラフ全体を埋めるまでゆっくりと成長し、プログラムの読み込みが遅くなるか、プログラムの切り替えに時間がかかります。

このコマンドで問題をいくらか軽減できましたが、最終的にはコンピューターのキャッシュが再びいっぱいになるので、それはただの絆創膏です:

Sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"

そこで、RAMを増やすと思ったので、2 GBのスティックを8 GBのスティックに交換しました。今では10 GBのRAMがあります。

そして、私の「キャッシュ」まだはゆっくりと最大になり、その結果、コンピューターが遅くなります。また、最初にブートしてログインしたときにコンピューターが「キャッシュ」を最大にして起動することもあります。しかし、必ずしもそうとは限らず、それが起こる理由を決定するパターンがあるかどうかわかりません。

Ubuntuはなぜそんなに多くのキャッシュを使用しているのですか? Ubuntuには10GBで十分ではありませんか?

Gnomeパネルに表示されるシステムモニターは次のとおりです。中央の正方形は、RAMの使用量を示しています。薄緑色の領域は「キャッシュ」です。

Cache near max

これは私の記憶とスワップ履歴であり、「キャッシュ」に関する情報は含まれていないようです。この時点で、「キャッシュ」と「スワップ」の違いについて完全に明確ではないことに気付きました。

memory and swap

4
Questioner

あなたはおそらくあなたのスワップ性を減らす必要があります。

カーネルは、キャッシュページを削除してRAMを本当に空きとしてマークするよりも、キャッシュとして空きRAMを使用する方が良いと考えています。キャッシュを増やすことは一般に良いことです。

ここで、すべてのメモリがキャッシュに割り当てられ、アプリケーションがより多くのメモリを必要とする場合にどうするかという疑問が生じます。多くの場合、ページをキャッシュから削除してアプリに引き渡すことが正しいことですが、まれにしか使用されないページをスワップアウトしてアプリに渡し、キャッシュをそのまま保持することが有益な場合があります。

このプロセスは、/proc/sys/vm/swappinessによって大まかに制御されます。詳細については、 ほとんどの人がswappinessを10-20に減らすことをお勧めするのはなぜですか? および swappinessをどのように設定しますか? に対する優れた回答を確認してください。

8
sмurf

システムは非常に多くのキャッシュを使用します。これは、取得のために存在し、高速化に役立つためです。

キャッシングは一般に、取得が遅いか、取得が速い場所に計算が遅い何かのコピーを置く場所です。プログラムは計算結果をメモリに保存し、WebプロキシはLAN上のマシンのWebからリソースのコピーを保存します。この場合、システムはハードドライブからのデータをRAM(およびその他のデータ)。

また、システムを高速化するため、他の何かによって使用されていないすべてのキロバイトを使用することは論理的に理にかなっています。結局のところ、他の何も使用していないメモリチャンクのオプションは次のとおりです。

                      |Use For Cache | Don't Use For Cache
——————————————————————+——————————————+————————————————————
Data needed again     |Faster system | No difference
Data not needed again |No difference | No difference

したがって、キャッシュのために何もしていないメモリのすべてのビットを常に使用する必要があります。

RAMの10%がさまざまな用途に使用され、90%がキャッシュに使用されているシステムは、「最大化」と見なされるべきではありません。使用中の10%、さらに90%が無料であると見なす必要があります。したがって、キャッシュには何も必要とせずに使用されます。

ただし、スワッピングを検討する場合、これはRAMのディスクからデータをキャッシュすることとほぼ逆です。キャッシュがRAMを使用してI/O(および潜在的に他のもの)を高速化する場合、ページングは​​ディスクスペースを使用して拡張します羊。

そのため、システムで使用されているすべてのRAMがあり、さらに必要な場合、2つのオプションがあります。

  1. 結局は最適化にすぎないため、キャッシュの一部を捨ててください。
  2. 他の何かに使用されているいくつかのRAMをページアウトします。

これらのどれが最良であるかについての普遍的な答えはありません。完璧な答えは、予測できないものに依存し、最良の答えでさえ、システムのセットアップと使用方法に依存するものに依存します。

これらの反対のアクションは同時に意味をなすことに注意してください。1つは、必要になる可能性のある取得が遅い情報に優先順位を付けること、もう1つは、すぐには必要のない情報の優先順位を下げることです。

250MBはそれほど多くないので、私はひどく心配しませんが、インタラクティブな(サーバーではなく)使用のための高RAMデスクトップシステムの場合、Imightswappinessを減らして実験し、ここでバランスをとる行為を変更します。 この回答 は、おそらくそれほど大きな違いをもたらさない理由については非常に優れていますが、うまくいくかどうかを試すには妥当なことです。

最初に対処する必要があるはるかに大きな問題があります。誰かがあなたのマシンで時々Sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"を実行し、それ以外の場合は未使用のRAMからすぐにアクセスできるデータを消去することです。また、システムがメモリから取得できるものを再計算または再取得するように強制します。それはシステムを遅くし、RAMはお金の無駄になります。

5
Jon Hanna

そして、私の「キャッシュ」はまだゆっくりと使い果たされ、結果として私のコンピューターは遅くなります。

減速の原因については、他の場所を調べる必要があります。 「キャッシュ」と呼ばれるメモリは、他にRAMが必要な場合にカーネルが自由に廃棄できるメモリです。最近ディスクから読み取ったデータのようなものです。

This は、かなり古いですが、メモリサブシステム内の一部の可動部分の妥当な説明です。それが言うように、

Linuxにはこの基本的なルールがあります。空きRAMのページは無駄なRAMです。

RAMの量に関係なく、キャッシュはいっぱいになるまで大きくなります。これは心配する必要はありません。それとはほど遠い、非常に重要なパフォーマンスの最適化です-RAMはfastSSDよりも約100倍高速です。ディスクから読み取る必要がないことは大きな勝利です。

4
RAOF