あなたは経験しているLinuxは私のラム食べた問題を。
パニックしないでください。
これは問題ではありません。
システムは設計どおりに機能しています。
問題はOSではなく、問題は「空き」メモリとは何かを理解することです。
Unixシステムは、プログラムを実行するだけでなくメモリを使用します。メモリは次の用途に使用できます。
- 実行中のプログラム(アクティブ/使用済み)
- 転送中のデータのバッファリング(バッファ)
- 最近ディスクから読み書きされたデータをキャッシュする(キャッシュ)
- 絶対に何もない(無料)
以下は、最新のUnixシステムがRAM使用量をどのように報告するかについての短い(そしてほとんど不完全な)ツアーです。
空きメモリ(OS定義)とは何ですか?
UnixシステムがRAMをFreeと報告している場合、「このRAMを何にも使用していない」という意味です。
空き RAMは事実上価値がありません-システムを高速化するのではなく、何かが必要な場合に備えて「空き」状態になっているだけです。それは、私が上記で言及した他の3つの項目のいずれかです。
キャッシュメモリとバッファメモリとは何ですか?
キャッシュメモリとバッファメモリは、オペレーティングシステムがシステムを高速化するために使用しているRAMです。
このメモリは現在プログラムを実行するために必要ではないので、OSは頻繁に必要なデータを保持するためにそれを使用しています-たとえば、Cライブラリ(実行するほとんどすべてのプログラムに必要)はほとんど常にcache
メモリに保持されるため、システムはディスクにアクセスして、画面に「Hello World」を印刷するために必要な指示を見つける必要はありません。
それは実際にはそれよりはるかに複雑です- 共有メモリ、有線メモリなどがあります-しかし、私たちの目的のために、この簡単な説明は適切です。
アクティブメモリとは何ですか?
アクティブメモリは、「使用済み」メモリとして理解される一部です-アプリケーションが使用するRAMの種類-スプレッドシートの並べ替え、Webページの提供、グラフィックの編集など。
最近、「アクティブ」メモリは「アクティブ」になりました- -内容(読み取りまたは書き込み)を利用したと主張するプログラムは、スワップアウトの適切な候補とは見なされません。
非アクティブメモリとは何ですか?
アクティブメモリと同様に、非アクティブメモリは、アプリケーションが実行するあらゆる目的で使用するRAMです。違いは、このメモリがしばらくアクセスされていないため、OSがディスクにスワップアウトできると思い込んでプッシュするようになった場合、(少し運が良ければ)それを要求しないと主張するプログラムは、決して気付かないでしょう。
「使用済み」メモリとは何ですか(人間の定義)
あなたと私が「使用済み」メモリと考えるものは、本質的には、アクティブメモリと非アクティブメモリの合計です。現在、アプリケーションが使用を要求しているすべてのRAM。
限り、あなたはより多くのアクティブおよび非アクティブメモリーの合計(プラストップの発言の512〜1024メガバイトの素敵な安全マージン)あなたはOKの場所にいるよりもRAMインストールされているよう:あなたのOSはおそらくスワップを打つとパフォーマンスを殺すことはありませんが。
「空き」メモリ(人間の定義)とは何ですか?
あなたと私が「空き」メモリと考えるものは、プログラムを実行するために利用可能なメモリです。
これは、OSが報告する「無料」の数字よりも少し複雑です。プログラムがRAMを要求すると、オペレーティングシステムは次の方法で、RAMの破壊を最小限に抑えようとします。
- 使用可能な空きメモリがある場合(何もしないで座っている場合)、そのRAMが割り当てられます。
- 使用可能な空きメモリがない場合、OSはキャッシュとバッファスペースを共食いします。バッファプール内のアクセス頻度が最も低い/最も少ないものが破棄され、そのRAMがプログラムに与えられます。
- 共食いするバッファ/キャッシュRAMがない場合、スワッパーは非アクティブなメモリを調べ、アクセスされる可能性が最も低いと思われる領域を選択します。そのデータはスワップ(ディスク)にページアウトされ、新しく解放されたRAMがプログラムに与えられます。
- すべての非アクティブRAMがスワップアウトされると、スワッパーはアクティブRAMをディスクに配置し始めます。
(これは、パフォーマンスは通常、犬に行く場所についてです:プログラムは、CPUにそのターンを取得するたびにそのスワップアウトされたビットは意味RAMに戻って、もたらされる必要があるいくつかの他のプログラムのActiveメモリがスワップアウトする必要があります -スワップの高回転はスラッシングと呼ばれます)
- システムが可能な限りすべてをスワップアウトした場合(およびスワップパーティションがいっぱいになった場合)、またはスワップパーティションなしでシステムを実行している場合は、Bad Thingsが発生します。この時点で、次の2つのいずれかが発生します。
malloc()
失敗します。これはPOSIX準拠の動作です。オペレーティングシステムは、RAMを要求するプログラムに、要求を満たすことができないことを通知します。
プログラムは、より少ないRAMを要求するか、メモリの小さなチャンクで間に合わない場合は、クリーンアップして終了できます。(プログラムの記述が不適切な場合、単純にクラッシュします。)
- Linuxボックスを使用している場合、OOM-Killerはギャングスタイルのドライブバイを実行し、他のプロセスを終了して、要求を満たすのに十分なRAMを解放しようとします。
ここでの私の説明とリンクされた質問に対する私の答えでわからない場合、これは問題に対処するひどい方法だと思います。
ファイルを削除すると空きRAMが増えるのはなぜですか?
ここの質問の例では、バックアップファイルを削除することでRAMを「解放」できることに気付きました。その説明は非常に簡単です。 (リンクされていない)OSは、誰もそのデータに再びアクセスすることはないと知っており、ファイルシステムのキャッシュからデータを削除します。
これにより、OSはより多くの空きメモリを報告しますが、システムのパフォーマンスには影響しません。