私は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
- 「利用可能+使用可能=合計」ではないのはなぜですか?
空きメモリは、使用されているメモリと空きメモリのサブセットであるため、システムを強制的に交換しなくても使用できるメモリの量です。つまり空きメモリと現在のキャッシュに使用されているメモリをすぐに削除できます。バラよりディストリビューションで移植可能な使用可能なメモリ量を取得するには?計算に関する詳細。
- 「空き+バッファ+キャッシュ=使用可能」ではないのはなぜですか?
バッファとキャッシュに使用されるメモリの一部は使用できないため、すぐに削除することはできません。これを使用すると、システムが透かしの上に押し出されます。
- 「アクティブ+非アクティブ+アイドル=合計」ではないのはなぜですか?
アクティブ値と非アクティブ値は対応するLRUを反映し、ページテーブルなどの一部のページは追跡されないかPageTables
削除できません(Unevictable
)。
同様の方程式がありますか?
free
出力では、「使用済み」は、結果が負数(これが発生する可能性がある)でない限り、「フル - 使用可能 - キャッシュ - バッファー」として計算されます。例えばLXC)この場合は「完全に無料」です。したがって、すべての場合、「すべて」は「使用+使用可能+キャッシュ+バッファ」または「使用+使用可能」です。