GNU/Linux >> Linux の 問題 >  >> Linux

Linux マシンに新しいアプリケーションをデプロイするのに十分なメモリが空いているかどうかを知るにはどうすればよいですか?

(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 ユーザーが実行する必要があることに注意してください。


Linux
  1. Linuxでメモリバッファとキャッシュを削除する方法

  2. Linuxをシャットダウンまたは再起動する方法

  3. sar、ps、および free を使用して Linux でメモリ使用量を計算する方法

  1. Linuxでメモリ消費をログに記録する方法は?

  2. リモート マシンが Windows と Linux のどちらを使用しているかを確認するにはどうすればよいですか?

  3. Linux ソフトウェア RAID を新しいマシンに移動するにはどうすればよいですか?

  1. Linuxでメモリキャッシュをクリアする方法

  2. LinuxにSpotifyアプリケーションをインストールする方法

  3. Linuxでアプリケーションによるメモリ使用量を制限するには?