Linuxメモリの計算と測定:何がプラスと何が同じですか?

Linuxメモリの計算と測定:何がプラスと何が同じですか?

私はLinuxメモリの管理に関する記事を読んでおり、空きメモリ、利用可能なメモリ、スワップ領域などの概念を理解しています(おそらくうまくいかないかもしれません)。しかし、次のコマンドで確認すると:

cat /proc/meminfo; free -w; vmstat -s

私の理解を示すために正確な数を計算することはできません。

たとえば、「cat /proc/meminfo」は次のように表示します。

MemTotal:        8169968 kB
MemFree:          984124 kB
MemAvailable:    4231224 kB
Buffers:          171420 kB
Cached:          3272688 kB
SwapCached:        65604 kB
Active:          3415076 kB
Inactive:        3388312 kB
Active(anon):    2636088 kB
Inactive(anon):   789932 kB
Active(file):     778988 kB
Inactive(file):  2598380 kB
Unevictable:          64 kB
...

"free -w"は次のようになります。

              total        used        free      shared     buffers       cache   available
Mem:        8169968     3566616      983864       66952      171420     3448068     4230964
Swap:       3903484      500620     3402864

「vmstat -s」が表示されます。

  8169968 K total memory
  3566616 K used memory
  3415476 K active memory
  3388312 K inactive memory
   983864 K free memory
   171420 K buffer memory
  3448068 K swap cache
  3903484 K total swap
   500620 K used swap
  3402864 K free swap
  9335996 non-nice user cpu ticks
...

私の質問は次のとおりです。

1. なぜ「中古+使用可能=全体」ではないのですか?

一部の記事では、「空き」メモリは何も使用されていませんが、「空き」メモリは一部のバッファで使用できますが、いつでもプログラムに割り当てることができます。私が理解したところによると、これは次のことを意味します。

合計 = 使用可能 + 使用済み

しかし、私が計算したとき:

4231224 ("MemAvailable" in /proc/meminfo) + 3566616 ("used memory" in vmstat) = 7797840

全体(8169968K)との差:372128K(または363M)未満

4230964 ("available" in free) + 3566616 ("used" in free) = 7797580

全体(8169968K)との差:372388K(または363M)未満

それでは、なぜそのギャップがそれほど大きいのでしょうか?

2. 「無料+バッファ+キャッシュ=使用可能」ではないのはなぜですか?

一部の記事によると、Linuxはバッファとキャッシュにいくつかのメモリを使用できるため、メモリのこの部分は「使用可能」ではありませんが(何も使用しないのですぐにプログラムに割り当てることができます)、まだ「使用可能」です中にもかかわらず)。バッファーまたはキャッシュにありますが、いつでも解放され、プログラムに割り当てることができます。しかし、私が計算したとき:

/proc/メモリ情報:

984124 (MemFree) + 171420 (Buffers) + 3272688 (Cached) = 4428232

「MemAvailable」(4231224)との違い:197008K(または192M)以上

無料:

983864 (free) + 171420 (buffers) + 3448068 (cache) = 4603352

利用可能(4230964)との違い:372388K(または363M)

ギャップがなぜそんなに大きいのですか?

また、この質問と前の質問の両方に「372388 K」という数字が表示されます。つまり、「free」コマンドでは次のようになります。

total = available + used + 372388
total = free + buffers + cache - 372388

それでは、それは何ですか(「372388 K」メモリ)?

3. 「アクティブ+非アクティブ+アイドル=フル」ではないのはなぜですか?

一部の記事では、「アクティブ」は最近アクセスされたメモリであると言いますが、「非アクティブ」はそうではありません。私が理解している制限では:

アクティブ(アプリケーション)+非アクティブ(アプリケーション)=アプリケーションで使用されるメモリアクティブ(バッファ)+非アクティブ(バッファ)=バッファで使用されるメモリ...

したがって、「アクティブ+非アクティブ=使用済み合計メモリー」および「使用済み合計メモリー+使用可能=合計メモリー」です。しかし、私が計算したとき:

/proc/メモリ情報:

3415076 (Active) + 3388312 (Inactive) + 984124 (MemFree) = 7787512

全体(8169968K)との差:382456K(または373M)未満

仮想マシン統計:

3415476 (active) + 3388312 (inactive) + 983864 (free) = 7787652

総数(8169968K)との差:382316K(または373M)未満

私の理解は正しいですか?同様の方程式がありますか?

私がこの質問をする理由は、メモリを計算するアプリケーションを書くことではなく、私が理解したことを確認し、私が逃した部分を見つけることです。

たとえば、私の給料は1,000ドルですが、銀行口座に800ドルしかないとします。ある記事では、その理由が税金のためだと言われています。 12%の税金を計算しましたが、まだ80元が足りなくてもう一度尋ねてみると、いよいよ社会保障の概​​念を理解するようになりました。

これらのLinuxメモリ統計の出力は、「使用可能なスワップ+使用されたスワップ=総スワップ」の正確な計算以外に、出力からの方程式が得られないレベルです。これにより、Linuxメモリ管理の理解に自信がなくなりました。特にギャップが373MBに達すると何かが抜けたようです。

ベストアンサー1

  1. 「利用可能+使用可能=合計」ではないのはなぜですか?

空きメモリは、使用されているメモリと空きメモリのサブセットであるため、システムを強制的に交換しなくても使用できるメモリの量です。つまり空きメモリと現在のキャッシュに使用されているメモリをすぐに削除できます。バラよりディストリビューションで移植可能な使用可能なメモリ量を取得するには?計算に関する詳細。

  1. 「空き+バッファ+キャッシュ=使用可能」ではないのはなぜですか?

バッファとキャッシュに使用されるメモリの一部は使用できないため、すぐに削除することはできません。これを使用すると、システムが透かしの上に押し出されます。

  1. 「アクティブ+非アクティブ+アイドル=合計」ではないのはなぜですか?

アクティブ値と非アクティブ値は対応するLRUを反映し、ページテーブルなどの一部のページは追跡されないかPageTables削除できません(Unevictable)。

同様の方程式がありますか?

free出力では、「使用済み」は、結果が負数(これが発生する可能性がある)でない限り、「フル - 使用可能 - キャッシュ - バッファー」として計算されます。例えばLXC)この場合は「完全に無料」です。したがって、すべての場合、「すべて」は「使用+使用可能+キャッシュ+バッファ」または「使用+使用可能」です。

おすすめ記事