一般的な Linux コマンドの分析: 無料

無料

メモリ使用量を表示する

補足

free コマンドは、現在のシステムの未使用および使用済みメモリの数を表示でき、カーネルによって使用されているメモリ バッファも表示できます。

文法

無料(オプション)

オプション

-b # メモリ使用量をバイト単位で表示; 
-k # メモリ使用量を KB 単位で表示; 
-m # メモリ使用量を MB 単位で表示; 
-g # メモリ使用量を GB 単位で表示します。
-o #バッファ調整列を表示しません; 
-s<間隔秒> #メモリ使用量を継続的に監視します; 
-t #メモリ合計列を表示します; 
-V #バージョン情報を表示します。

free -t # sum の形式でメモリ使用量情報を表示します
free -s 10 # メモリ使用量情報を定期的にクエリし、10 秒ごとにコマンドを実行します

メモリ使用量を表示する

free -m
             キャッシュされた使用済みの空き共有バッファーの合計
Mem: 2016 1973 42 0 163 1497 
-/+ バッファー/キャッシュ: 312 1703
スワップ: 4094 0 4094

Mem 行の最初の部分について説明します。

total: 合計メモリ、
used: 使用されているメモリの数、
free: 空きメモリの数、
shared: 現在廃止されている、
buffers バッファ: キャッシュされたメモリの数、
キャッシュされたページ: キャッシュされたメモリの数。

関係: 合計 = 使用済み + 無料

2 番目の部分 (-/+ バッファ/キャッシュ) では、以下について説明します。

(-buffers/cache) 使用済みメモリの数: used –buffers – Mem 行の最初の部分にキャッシュ
(+buffers/cache) 空きメモリの数:free +buffers +Mem 行の最初の部分にキャッシュ

-buffers/cache はプログラムによって実際に消費されるメモリを反映し、+buffers/cache は悪用される可能性のあるメモリの総量を反映していることがわかります。

3 番目の部分はスワップ パーティションを参照します。

出力の 4 行目はスワップ パーティション SWAP で、これは通常仮想メモリと呼ばれるものです。違い: 2 行目の使用/空き (mem) と 3 行目の使用/空き (-/+ バッファ/キャッシュ) の違い。2 つの違いは使用の観点にあり、最初の行は OS の観点からのもので、OS ではバッファ/キャッシュがすべて使用されるため、使用可能なメモリは 2098428KB となり、使用されるメモリはカーネル (OS) は + アプリケーション (X、oracle など) によって使用される + バッファー + キャッシュを使用します。

3 行目は、アプリケーションの観点から、アプリケーションがメモリを使用する必要がある場合、buffers/cached はファイル読み取りのパフォーマンスを向上させるため、アプリケーションにとっては、buffers/cached が available と等しいことを示しています。バッファ/キャッシュはすぐにリサイクルされます。

したがって、アプリケーションの観点から見ると、利用可能なメモリ = システムの空きメモリ + バッファ + キャッシュとなります。たとえば、マシンの使用可能なメモリは次のとおりです。

18007156=2098428KB+4545340KB+11363424KB

次に、メモリの交換がいつ、どのような方法で行われるかを説明します。

使用可能なメモリが定格値に満たない場合は、交換のための会議が開催されます。評価の見方:

cat /proc/meminfo 
MemTotal
: 16140816 kB 
MemFree: 816004 kB 
MemAvailable: 2913824 kB
バッファー: 17912 kB キャッシュ
済み: 2239076 kB SwapCached 
: 0 kBアクティブ: 12774804 kB
非アクティブ: 1594328 kB アクティブ(anon): 1 2085544 
kB
アクティブ(非アクティブ): 12229 
228KB 
_ 
_ 
_ 
_ 
_ 
_ 
_ 
_
マップ済み: 117136 kB 
HugePages_Surp: 0
Shmem: 58736 kB
スラブ: 395568 kB 
SReclaimable: 246700 kB 
SUnreclaim: 148868 kB 
KernelStack: 30496 kB 
PageTables: 165104 kB 
NFS_Unstable: 0 kB
バウンス: 0 kB 
WritebackTmp: 0 kB 
CommitLimit: 16262404 kB B 
Committed_AS: 27698600 kB 
VmallocTotal: 34359738367 kB 
Vmalloc Used: 311072 kB 
VmallocChunk: 34350899200 kB 
HardwareCorrupted: 0 kB 
AnonHugePages: 3104768 kB 
HugePages_Total: 0 
HugePages_Free: 0 
HugePages_Rsvd: 0 
Hugepagesize: 2048 kB 
DirectMap4k: 225536 kB
DirectMap2M: 13279232 kB 
DirectMap1G: 5242880 kB

スワップにより、システムで使用される物理ページの数が次の 3 つの方法で削減されます。

  1. バッファーとページキャッシュのサイズを削減し、

  2. System V タイプのメモリ ページをスワップアウトします。

  3. ページを交換または破棄します。(メモリ ページがアプリケーションによって占有されている、つまり物理メモリが不足しています)。

実際、少量のスワップはシステムのパフォーマンスに影響しますか。

それでは、バッファとキャッシュはどちらもキャッシュですが、この 2 つの違いは何でしょうか?

ディスク アクセス効率を向上させるために、Linux は慎重な設計を行っており、dentry のキャッシュ (VFS でファイル パス名から i ノードへの変換を高速化するために使用) に加えて、次の 2 つの主要なキャッシュ メソッドも採用しています。

バッファキャッシュとページキャッシュ。前者はディスク ブロックの読み取りと書き込み用であり、後者はファイル i ノードの読み取りと書き込み用です。これらのキャッシュは、I/O システム コール (読み取り、書き込み、getdents など) の時間を効果的に短縮します。ディスクの操作には論理レベル (ファイルシステム) と物理レベル (ディスクブロック) があり、これら 2 種類のキャッシュはそれぞれ論理レベルと物理レベルのデータをキャッシュします。

ページ キャッシュは実際にはファイル システム用であり、ファイル キャッシュであり、ファイル レベルのデータがページ キャッシュにキャッシュされます。ファイルの論理層は実際の物理ディスクにマッピングする必要があり、このマッピング関係はファイル システムによって完成されます。ページ キャッシュ内のデータを更新する必要がある場合、バッファ キャッシュはディスク ブロックのキャッシュに使用されるため、ページ キャッシュ内のデータはバッファ キャッシュに渡されます。しかし、カーネル 2.6 バージョン以降、この種の処理は非常に単純になり、実際のキャッシュ操作はなくなりました。

バッファ キャッシュはディスク ブロックのキャッシュです。つまり、ファイル システムがない場合、ディスク上で直接動作するデータはバッファ キャッシュにキャッシュされます。たとえば、ファイル システムのメタデータはバッファ キャッシュにキャッシュされます。バッファキャッシュ。

簡単に言うと、ページ キャッシュはファイル データのキャッシュに使用され、バッファ キャッシュはディスク データのキャッシュに使用されます。ファイルシステムの場合、ファイル操作を行う場合はページキャッシュにデータがキャッシュされ、ddなどのツールでディスクを直接読み書きする場合はバッファキャッシュにデータがキャッシュされます。

したがって、Linux について見ると、スワップ領域を使用しない限り、メモリが少なすぎることを心配する必要はありません。頻繁にスワップを使用する場合は、物理メモリの追加を検討する必要があるかもしれません。メモリが十分であるかどうかを確認するための Linux の標準でもあります。

アプリケーション サーバーの場合、通常は 2 行目の +buffers/cache だけを確認します。つまり、空きメモリがアプリケーション プログラムに対して少なすぎるため、プログラムの最適化またはメモリの追加を検討する必要があります。

おすすめ

転載: blog.csdn.net/zy_dreamer/article/details/132177735