Yüksek bellek kullanımı ancak hiçbir işlem kullanmıyor


17

Ben koşmak free -mVM Hyper-V üzerinde çalışan bir debian:

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

Bu yüzden 10GB'lık belleğimden 8.5GB kullanımda ve sadece 1500MB boş (önbellek hariç).

Ama hafızayı neyin kullandığını bulmak için mücadele ediyorum. ps aux | awk '{sum+=$6} END {print sum / 1024}'RSS kullanımını toplaması beklenen çıktı :

1005.2

Başka bir deyişle, işlemlerim yalnızca 1GB bellek kullanıyor, ancak bir bütün olarak sistem (önbellek hariç) 8.5GB kullanıyor.

Diğer 7.5GB'ı ne kullanabilir?

ps: 1200 mem kullanılan (ücretsiz mem = 8.8GB) benzer bir yapılandırmaya sahip başka bir sunucum var ve ps RSS kullanım toplamı beklediğimden daha yakın 900 olduğunu ...


DÜZENLE

cat /proc/meminfo makine 1'de (düşük bellek):

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 makine 2'de (normal bellek kullanımı):

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

Yanıtlar:


15

Hyper-V kullandığınızı anlıyorum, ancak kavramlar benzer. Belki bu sizi doğru yola sokacaktır.

Sorununuz büyük olasılıkla hipervizörün belleği optimize etmek için kullandığı bir teknik olan sanal bellek balonundan kaynaklanıyor. Açıklama için bu bağlantıya bakın

Aynı belirtilerinizi vSphere'deki VM'lerimle gözlemledim. Üzerinde çalışan hiçbir şey olmayan bir 4G makine 30M önbellek tarafından kullanılan rapor, ancak 3G - "+" tamponlar "satırında" kullanılan "rapor.

İşte VMWare'nin istatistik komutundan örnek çıktı. Bu, 3G'ye "kullanılan" tutarıma ne kadar yakın olduğunu gösterir:

vmware-toolbox-cmd stat balloon
3264 MB

Benim durumumda, belli ki, balon sürücüm ~ 3G kullanıyordu

Balon istatistiklerinizi almak için Hyper-V'deki benzer komutun ne olduğundan emin değilim, ancak benzer sonuçlar alacağınızdan eminim


Teşekkürler - kesinlikle bir şeyin üzerindesiniz. lsmod | grep hv_ düşük bellek makinesinde hv_balloon gösterir ancak diğerinde göstermez - böylece balon modülü diğerine yüklenir, diğerine yüklenmez. Ve davranış bu tanıma çok benziyor .
assylias

vmware-toolbox-cmdHyper V'de eşdeğerinin ne olduğundan emin değilim .
assylias

@assylias biliyorum, üzgünüm. Bu cevabı yazarken kendime baktım ve boş kaldım. Ancak, hızlı bir şekilde çok fazla bellek ayıran bir program yazarsanız, hipervizörü VM'nizin kaynaklara ihtiyacı olduğuna ikna edebilir. Disk önbellek tahliye test durumuna benzer, ancak farklı kök neden.
Matt

Bu sorunu çözmek için Hyper-V'deki dinamik ram özelliğinin ayarını kaldırabilirsiniz.
Ashish Negi

Korkarım buradaki çözümü gerçekten göremiyorum.
Jamie Hutber

1

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

Kısa cevap: çekirdek önbellek dosyaları gibi çeşitli görevler için arabellekleri / önbellek kullanır. Bu bellek gerektiğinde uygulamalar tarafından kullanılabilir, bu nedenle 944 MB kullandığınızı söyleyebilirsiniz.


Bu bağlantıya göre, 944MB önbellek miktarıdır
assylias

2
Hayır, 944MB, uygulamalar tarafından kullanılan RAM miktarıdır ve diğer uygulamalar tarafından kullanılamaz. Bu yazıyı tekrar okuyun: "Linux (çoğu modern işletim sistemi gibi) her zaman önbelleğe almak için boş RAM kullanmaya çalışacaktır, bu yüzden Mem: free neredeyse her zaman çok düşük olacaktır. Bu nedenle - / + tamponları / önbellek: önbellekleri yok sayarken ne kadar bellek serbest kalır; bellek kıtlanırsa önbellekler otomatik olarak serbest bırakılır, bu yüzden gerçekten önemli değildir. "
vik

evet ve - / + tamponlar / önbellek 1.5GB ücretsiz bellek gösteriyor ...
assylias

- / + arabelleklerindeki 1485 boş alanın sistemdeki uygulamalar için kullanılabilir bellek miktarı DEĞİLDİR. Uygulamalarınız için gerçekten kullanılabilir bellek miktarı: (10017 - (9475 - 8531)) = 9073. Bu anlamlı mı?
Vik

Sanırım yanılıyorsunuz: ikinci satır önbelleği ve arabellekleri hariç tutar ve uygulamaların gerçek bellek kullanımıdır (ve bağlantınız budur ...).
assylias
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.