(OPはちょっと遅いかもしれませんが、よく聞かれるのでやってみます)
free
通常、次のように表示されます:
total used free shared buffers cached
Mem: 8195284 8137708 57576 0 1232328 2651156
-/+ buffers/cache: 4254224 3941060
Swap: 18892216 759852 18132364
人々は Mem:
に注目する傾向があります 空きメモリの量を調べようとすると、行が表示されます。残念ながら、Linux カーネルは (少なくとも) 次の方法で利用可能なメモリを最適に使用しようとするため、この行は誤解を招く可能性があります。
-
必要に応じてすぐに利用できるように、I/O サブシステム (ディスクなど) からのデータをキャッシュします。
-
アクティブなプロセスのデータをキャッシュすることを優先して、しばらく非アクティブだったプロセスを積極的にスワップ領域に追い出します。これは応答性よりもスループットを優先する傾向があるため、カーネルを調整してこの動作を変更する人もいます。
最初のポイントは、free
に関する混乱の原因です。 、Mem:
行は、キャッシュに使用されたメモリを使用メモリ量に含めます。ただし、パフォーマンス上の理由から、カーネルは可能な限り多くをキャッシュします。実際、しばらく稼働している Linux システムでは、空きメモリがほぼゼロになる傾向があります。未使用のメモリは無駄なメモリです。
ただし、キャッシュ メモリは、別のプロセスが必要とする場合、カーネルによって解放できます。ある程度 I/O パフォーマンスに影響を与えますが、他のプロセスはスワップ領域を使用せずにより多くのメモリを持つことができます .したがって、ほとんどの意図と目的のために、そのメモリは無料です .
だから free
キャッシュ メモリが空いていると見なされる 2 行目:
-/+ buffers/cache: 4254224 3941060
この 2 行目は、特定の目的のために十分な空きメモリがあるかどうかを知りたいときに見るべきものです。
上記の例では、Mem:
に従って ~57 MB の空きメモリがあります。ただし、2 行目を読むと、実際には約 3.9 GB あります。 アクティブなプロセスを強制的にスワップすることなく使用できます。補足として、プロセスとキャッシュ用にメイン メモリにより多くのスペースを確保するために、スワップ アウトされた約 760 MB のほとんど使用されないデータもあります。
ほぼ同時に、/proc/meminfo
の内容 :
MemTotal: 8195284 kB
MemFree: 57660 kB
Buffers: 1232352 kB
Cached: 2651156 kB
SwapCached: 119936 kB
.
.
.
MemTotal
:カーネルによって検出された利用可能な物理メモリ。
MemFree
:未使用の物理メモリ - Mem:
で示される空きメモリ free
の行 .
Buffers
:raw ディスク ブロックの比較的一時的なストレージ。
Cached
:ディスクから読み取られたファイルのメモリ内キャッシュ。 SwapCached メモリは含まれません。
SwapCached
:一度スワップアウトされてからスワップインされたが、まだスワップ領域にあるメモリ。必要に応じて、その内容を交換する必要なく (低速で) 破棄することができます (非常に高速です)。
したがって、実際に使用可能なメモリの半正確な見積もりを取得するには
MemFree + Buffers + Cached + SwapCached
良い出発点です - そして free
その 2 行目に表示されます。
当然、メモリ管理と関連する統計と測定は、これよりも複雑です。 free
が示す数字 さらに詳しく知りたい場合は、他にも考慮すべき変数がたくさんあるため、これらはせいぜい単なる見積もりです。定期的にメモリ使用量の最適化を行っている人にとって、これは一種の芸術です。
編集:
この「問題」に関するややユーモラスなリンク:
http://www.linuxatemyram.com/
編集 2:
メモリ使用分析についてのコメントが芸術の一種であることを確認するには:
free
でも 最新の Linux システムでキャッシュされたデータの主要なチャンクを見逃しています。 /proc/meminfo
から 私のシステムで:
SReclaimable: 2253576 kB
これは、システム スラブ アロケータがディレクトリ エントリなどをキャッシュするために使用する約 2GB のメモリであり、再利用可能です (つまり、必要に応じてクリアしてプロセスで使用できます)。まだ free
はキャッシュ メモリを考慮せず、計算に入力しないため、使用済みメモリとして表示されます。
slabtop
ユーティリティを使用すると、システム管理者はスラブ キャッシュが何に使用されているかを知ることができます。
free
を持つ方法 (root ユーザーのみ) システムの実際のメモリ使用量は次のとおりです:
# swapoff -a
# sync
# echo 3 > /proc/sys/vm/drop_caches
# free
total used free shared buffers cached
Mem: 8195284 3181468 5013816 0 8656 228832
-/+ buffers/cache: 2943980 5251304
Swap: 0 0 0
# swapon -a
最初のコマンドは、スワップ領域を無効にします。利用可能なメモリがスワップアウトされたデータを保持するのに十分でない可能性がある場合は発行しないでください - その場合、 Swap:
を考慮する必要があります メモリ使用量の計算における空き行。
2 番目のコマンドは、バッファリングされたすべてのデータをディスクにプッシュします。これにより、次のステップでより多くのキャッシュ メモリを解放できます。
3 番目のコマンドは、セットの中で最も重要です。これにより、カーネルはキャッシュされたデータ (ページ キャッシュ、ディレクトリ エントリ、inode など) を可能な限り破棄します。
次に free
最後に、実行中のプロセスが -/+ buffers/cache:
で実際に使用するものを示します ライン。キャッシュされたデータをすべて削除した後でも、カーネルがすぐにキャッシュを再開することは非常に注目に値します。この場合、数秒以内にキャッシュ データがすでにほぼ 250MB に達しています。
最後のコマンドは、スワップ領域を再度有効にします - 最初のコマンドも使用された場合にのみ必要です。
これらのコマンドは、必要な権限を得るために root ユーザーが実行する必要があることに注意してください。