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

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

以下は、1日に何千人もの訪問者に512 MBのRAMとnginx / php-fpm / mysqld提供(主に静的)コンテンツを提供するCentOSを実行しているVPSのメモリグラフです。

週間記憶チャート

(x軸の日付は日付です)

ご覧のとおり、キャッシュとバッファが大幅に増加しました。メモリキャッシュは時々消去されます(責任あるcronジョブを除く)。これ以上成長できなくなると、通常は(常にではありませんが)消去されます。時にはほぼ完全に消去されたり、時には半分だけ消去されたりします。

私はこれらの除去の後に隠れたロジックを理解しようとしています。ファイルデータを長時間キャッシュし、メモリキャッシュを消去すると、通常よりも多くのメモリを使用する他のプログラムが表示されないことを願っています。

これは正常な動作ですか、それとも私が何かを見逃していますか?

更新:メモリのアップグレードでチャートが安定したようです。まだ小さな低下がありますが、アップグレード前ほど大きくはありません。

メモリアップグレード後

答え1

それはたくさんあるかもしれません。おそらく、実行中のプログラムの1つが一時的に多くのRAMを使用することがあります。 X軸の時間が実際に数週間である場合は、キャッシュが削除された原因に関する詳細情報を得るために、より高い解像度(たとえば、毎分1回または1秒あたり1回)でサンプリングする必要があります。その時間のps出力top(負荷平均を含む)も便利です。

答え2

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

どちらの場合も、ソースファイルが削除されると、キャッシュサイズ(オペレーティングシステムにメモリ不足がない場合はフルサイズ)がキャッシュから解放されます。

関連情報