メモリ使用量が多いが、プロセスが使用していない


17

free -mHyper-Vで実行されているdebian VMで実行します。

             total       used       free     shared    buffers     cached
Mem:         10017       9475        541        147         34        909
-/+ buffers/cache:       8531       1485
Swap:         1905          0       1905

したがって、10GBのメモリのうち、8.5GBが使用中であり、1500MBのみが無料です(キャッシュを除く)。

しかし、私はメモリを使用しているものを見つけるのに苦労しています。の出力はps aux | awk '{sum+=$6} END {print sum / 1024}'、RSS使用率を合計すると想定されています。

1005.2

つまり、私のプロセスは1GBのメモリしか使用しませんが、システム全体(キャッシュを除く)は8.5GBを使用します。

他の7.5GBを使用しているのは何ですか?

ps:1200の使用済みメモリ(空きメモリ= 8.8GB)を示す同様の構成の別のサーバーがあり、psでのRSS使用量の合計は900で、これは予想に近いものです...


編集

cat /proc/meminfo マシン1(低メモリ):

MemTotal:       10257656 kB
MemFree:          395840 kB
MemAvailable:    1428508 kB
Buffers:          162640 kB
Cached:          1173040 kB
SwapCached:          176 kB
Active:          1810200 kB
Inactive:         476668 kB
Active(anon):     942816 kB
Inactive(anon):   176184 kB
Active(file):     867384 kB
Inactive(file):   300484 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1951740 kB
SwapFree:        1951528 kB
Dirty:                16 kB
Writeback:             0 kB
AnonPages:        951016 kB
Mapped:           224388 kB
Shmem:            167820 kB
Slab:              86464 kB
SReclaimable:      67488 kB
SUnreclaim:        18976 kB
KernelStack:        6736 kB
PageTables:        13728 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     7080568 kB
Committed_AS:    1893156 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62284 kB
VmallocChunk:   34359672552 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       67520 kB
DirectMap2M:    10418176 kB

cat /proc/meminfo マシン2(通常のメモリ使用量):

MemTotal:       12326128 kB
MemFree:         8895188 kB
MemAvailable:   10947592 kB
Buffers:          191548 kB
Cached:          2188088 kB
SwapCached:            0 kB
Active:          2890128 kB
Inactive:         350360 kB
Active(anon):    1018116 kB
Inactive(anon):    33320 kB
Active(file):    1872012 kB
Inactive(file):   317040 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       3442684 kB
SwapFree:        3442684 kB
Dirty:                44 kB
Writeback:             0 kB
AnonPages:        860880 kB
Mapped:           204680 kB
Shmem:            190588 kB
Slab:              86812 kB
SReclaimable:      64556 kB
SUnreclaim:        22256 kB
KernelStack:       10576 kB
PageTables:        11924 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     9605748 kB
Committed_AS:    1753476 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62708 kB
VmallocChunk:   34359671804 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       63424 kB
DirectMap2M:    12519424 kB

回答:


15

Hyper-Vを使用していることは理解していますが、概念は似ています。たぶんこれはあなたを正しい軌道に乗せるでしょう。

問題は、ハイパーバイザーがメモリを最適化するために使用する手法である仮想メモリのバルーニングが原因である可能性があります。説明については、このリンクを参照してください

vSphereのVMでもまったく同じ症状が見られました。何も実行されていない4Gマシンでは、キャッシュで30Mが使用されていると報告されますが、「-/ + buffers」行で3Gを超える「使用済み」です。

VMWareの統計コマンドからの出力例を次に示します。これは、3Gが私の「使用済み」量にどの程度近づいているかを示しています。

vmware-toolbox-cmd stat balloon
3264 MB

私の場合、やや明らかに、私のバルーンドライバーは〜3Gを使用していました

Hyper-Vの同様のコマンドがバルーンの統計情報を取得するのかどうかはわかりませんが、同様の結果が得られると確信しています


ありがとう-あなたは間違いなく何かに夢中です。lsmod | grep hv_は、低メモリマシンではhv_balloonを表示しますが、他方では表示しません。したがって、バルーンモジュールは一方にロードされ、他方にはロードされません。そして、振る舞いはこの説明に非常によく似ています
-assylias

vmware-toolbox-cmdただし、Hyper Vに相当するものがわからない。
-assylias

@assyliasごめんなさい。この答えを書いている間、私は自分自身を見て、空っぽになりました。ただし、大量のメモリをすばやく割り当てるプログラムを作成すると、VMにリソースが必要であるとハイパーバイザーに確信させることができます。ディスクキャッシュエビクションテストケースに似ていますが、根本原因が異なります。
マット

この問題を解決するには、Hyper-Vのダイナミックラム機能の設定を解除します。
アシシュネギ

私はここで解決策を実際に見ていません。
ジェイミーハッバー

1

/server/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free

簡単な答え:カーネルは、ファイルのキャッシュなどのさまざまなタスクにバッファー/キャッシュメモリを使用します。このメモリは、必要に応じてアプリケーションで使用できるため、944 MBを使用していると言っても間違いありません。


そのリンクによると、944MBがキャッシュの量です
-assylias

2
いいえ、944MBはアプリケーションで実際に使用されているRAMの量であり、他のアプリケーションでは使用できません。その投稿を読み直してください:「(ほとんどの最新のOSのように)Linuxは常にキャッシュRAMに空きRAMを使用しようとするため、Mem:freeはほとんど常に非常に低くなります。したがって、行-/ + buffers / cache:キャッシュを無視するときの空きメモリ量。メモリが不足するとキャッシュは自動的に解放されるため、実際には問題になりません。」
-vik

はい、-/ +バッファ/キャッシュは1.5GBの空きメモリを示します...
assylias

-/ +バッファキャッシュ内の1485の空き容量は、システム上のアプリケーションで使用可能なメモリ量ではないことを理解してください。アプリケーションで実際に使用できるメモリの量は次のとおりです。(10017-(9475-8531))=9073。これは理にかなっていますか?
vik

あなたは間違っていると思います:2行目はキャッシュとバッファを除外し、アプリケーションの実際のメモリ使用率です(そして、それはあなたのリンクが言っていることです...)。
-assylias
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.