web-dev-qa-db-ja.com

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

これは、512MBのRAMおよびnginx/php-fpm/mysqldが1日あたり数千人の訪問者に(ほとんど静的な)コンテンツを提供するCentOSを実行しているVPSでのメモリグラフの様子です。

Weekly memory graph

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

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

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

これは正常な動作ですか、それとも何かが足りませんか?

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

After memory upgrade

14
redburn

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

3
Jim Paris

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

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

2
jlliagre