空でなければならないRAMスペースを回復する方法は?

空でなければならないRAMスペースを回復する方法は?

多くの人がそれを使用しています。ps_mem.pyプロセスが使用するRAMの量を確認するスクリプトです。この場合、スクリプトの結果は次のようになります。

---------------------------------
                        278.4 MiB
================================= 

したがって、システム全体は278.4MiBを使用しますが、freeまったく異なるものを表します。

# free
              total        used        free      shared  buff/cache   available
Mem:           1.8G        756M        980M         57M        131M        1.0G
Swap:          2.5G         11M        2.5G
Total:         4.3G        767M        3.4G

したがって、ここではシステムは756Mを使用します。キャッシュも、一時ファイルのためでもありません。

私も次のことを試しました。

# echo "3" > /proc/sys/vm/drop_caches

変化があることを確認しましたが、何も変わりませんでした。

それでは、どのような理由で占有されているページをどのように解放しますか?そのスペースが何で、なぜ使用されるのか、どのように復元するのかわかりません。現在唯一のオプションは、システムを再起動することです。

残りのコースを見ることができる写真です。これに基づいてRAM使用率を説明できますか?

ここに画像の説明を入力してください。

答え1

仮想メモリ管理の複雑さ(可能な限り最小限のメモリを使用することを目的としています)のため、実際に使用されているRAMの量を確認することは事実上不可能です。バラよりこのリンク

したがって、Pythonスクリプトが報告するものは何でも実際の状態を反映しません。

キャッシュされたコンテンツは実際に無料です。心配しないでください。キャッシュを削除しても実際には何も解放されず、必要に応じてカーネルが再利用するページを更新するだけです。

無料で報告されるのは、システムに関するカーネルの知識です。カーネルがメモリをサービスしているので、これは間違ったものではありません。ただし、共有メモリ(ライブラリ)、書き込み時にコピーメモリ(フォーク後にタッチされたページのみが実際に複製)、初期化されていない(ゼロ化)ページ、ロードされたプログラムコード(共有)、RAMに対応しない仮想メモリ、置き換えられたページ、プロセス間共有メモリ、カーネルメモリ(カーネルモジュールによって予約されている)、カーネルメモリ(メインカーネル自体)、ページテーブルを含む)など

要点は、カーネルがページを使用されていると報告する場合は、そのページを使用する必要があることです。一部のメモリを空にするには、どこかからメモリを取り出す必要があります。実行中のすべてのプロセス、モジュール、およびカーネル自体には、今は不要になる可能性があるメモリを空にするためのメカニズムがあり、後で再ロードされます(アプリケーションによって異なります)。プログラマーはこれを行うのに必要な複雑さを確認します。ただし、新しいメモリが必要な場合、カーネルはそれを処理します。より多くのメモリを要求するとファイルシステムキャッシュが削除され、使用している場合は古いページをスワップにプッシュし、zramなどを使用するとページが圧縮されます。停止するのを防ぐために殺す何かを見つけます。しかし、内部で起こるよりも自分がよく知っていると思うには、そのプロセスは複雑すぎます。

関連情報