Linuxがメモリキャッシュがいっぱいになったときにパージするのはなぜですか?


14

512 MBのRAMと1日あたり数千の訪問者に(ほとんど静的な)コンテンツを提供するnginx / php-fpm / mysqldを備えたCentOSを実行しているVPSのメモリグラフは次のようになります。

週間メモリグラフ

(これらはx軸上の日です)

ご覧のとおり、キャッシュとバッファの領域では非常に急激です。メモリキャッシュは不規則な間隔で消去されます(責任のあるcronジョブを除外します)。常にではありませんが、通常は、それ以上大きくならない場所でパージされます。時にはほぼ完全にクリアになることもあれば、途中までしかクリアされないこともあります。

これらのパージの背後にあるロジックを理解しようとしています。メモリキャッシュがクリアされると、ファイルデータがはるかに長くキャッシュされ、通常よりも多くのメモリを使用する他のプログラムが表示されないことが予想されます。

これは通常の動作ですか、何か不足していますか?

更新:メモリのアップグレードによりグラフが安定したようです。まだ小さな低下が見られますが、アップグレード前ほど重要な場所はありません。

メモリのアップグレード後


これはOpenVZ / Virtuozzoコンテナーですか、それともXENやKVMなどの実際のVMですか?
ヨルダン

1
それらが何であるかを説明することはできませんが、同じ動作を表示するVPSがあります。 dl.dropbox.com/u/1578899/memory-week.png
EightBitTony

@jordanm Xenベースの仮想マシンです。
レッドバーン

@EightBitTony共有していただきありがとうございます。あなたの見た目はもう少し「自然」に見えますが、メモリキャッシュでのドロップの同様の(ただし、より予測可能な)パターンがはっきりと見えます。
レッドバーン

Munin 2がデータのグラフ化/収集を行って、いくつかの相違点(あなたのスムーザーグラフ)が得られるかどうか疑問に思いましたが、私のものでさえ、毎日ではなくサイクルの途中で低下しています。確かに奇妙です。
EightBitTony

回答:


3

多くのことになる可能性があります。実行しているプログラムの1つが、たまに短時間、大量のRAMを使用している可能性があります。それが本当にx軸で数週間である場合、キャッシュがドロップされる原因となっているものに関する詳細情報を取得するために、はるかに高い解像度(たとえば、1分または2秒に1回)でサンプリングする必要があります。 psまた、topその間の出力(負荷平均を含む)も役立ちます。


はい、1分程度で発生するメモリ使用量の非常に短い突然のバーストが、Muninによって発見されないので、キャッシュがダンプされる可能性があると理論化できると思います。
EightBitTony

ヘッダーは実際には1週間のデータを表示しているという点で少し混乱しているので、これらは週ではなくx-asの日です。ポーリング頻度については、Muninは5分ごとにデータを取得しますが、頻度を変更できるとは思いません。私はnginx、mysql、php-fpm、munin-nodeのみを実行しています。おそらくmysqlキャッシュと関係があるのでしょうか?
レッドバーン

top(メモリ使用量でソート)に出力を5秒ごとにファイルに書き込み、そのファイルを分析したところ、キャッシュメモリが突然低下した時点で異常な動作を示すプロセスは見つかりませんでした。プロセスがこれほど多くのメモリを使用し、それでも5秒のウィンドウをエスケープできない限り、これが原因であるとは確信していません。しかし、amokを実行しているプロセスがない場合、それは何でしょうか?
レッドバーン

このスレッドは少し古いですが、方法論についての簡単な観察:プロセスがシステムメモリキャッシュにどれだけ貢献しているかはtopに(簡単に)反映されません。割り当てられたメモリが大幅に増加します。たとえば、送信のために非常に大きなファイルを小さなチャンクで読み取る-プロセスは割り当てられた数MB以上を使用することはありませんが、これらの数MBは絶えず変更され、参照をキャッシュに蓄積します。したがって、一番上の出力で見るべきことは、CPU時間の突然の蓄積です。
goldilocks

:あなたも、このに興味があるかもしれませんcognitivedissonance.ca/cogware/plog
ゴルディロックス

2

考えられる理由の1つは、ログなどのように、特定のサイズに達すると削除、圧縮、または他の場所に送信されるファイルの増大です。

どちらの場合でも、キャッシュされたサイズ(OSにメモリ負荷がない場合はおそらく全体)は、元のファイルが削除されるとすぐにキャッシュから解放されます。


興味深いアイデアですが、最もアクティブなログファイルがローテーションされる前に25MBのファイルサイズを超えることはめったになく、キャッシュ/バッファの使用量は約200MB減少する傾向があります。
レッドバーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.