Utilizzo elevato della memoria ma nessun processo lo sta utilizzando


17

Corro free -msu una VM debian in esecuzione su Hyper-V:

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

Quindi, con i miei 10 GB di memoria, 8,5 GB sono in uso e solo 1500 MB sono gratuiti (esclusa la cache).

Ma faccio fatica a trovare ciò che sta usando la memoria. L'output di ps aux | awk '{sum+=$6} END {print sum / 1024}', che dovrebbe sommare l'utilizzo RSS è:

1005.2

In altre parole, i miei processi utilizzano solo 1 GB di memoria ma il sistema nel suo insieme (esclusa la cache) utilizza 8,5 GB.

Cosa potrebbe essere usando gli altri 7,5 GB?

ps: ho un altro server con una configurazione simile che mostra mem usato di 1200 (mem libera = 8,8 GB) e la somma dell'utilizzo di RSS in ps è 900 che è più vicina a quello che mi aspetterei ...


MODIFICARE

cat /proc/meminfo sulla macchina 1 (memoria insufficiente):

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 sulla macchina 2 (normale utilizzo della memoria):

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

Risposte:


15

Capisco che stai usando Hyper-V, ma i concetti sono simili. Forse questo ti metterà sulla buona strada.

Il problema è probabilmente dovuto alla mongolfiera della memoria virtuale, una tecnica utilizzata dall'hypervisor per ottimizzare la memoria. Vedi questo link per una descrizione

Ho osservato i tuoi stessi esatti sintomi con le mie VM in vSphere. Una macchina 4G su cui non è in esecuzione nulla riporta 30M usati dalla cache, ma su 3G "usato" nella riga "- / + buffer".

Ecco un esempio di output dal comando statistico di VMWare. Questo dimostra quanto vicino al 3G sia stato applicato il mio importo "usato":

vmware-toolbox-cmd stat balloon
3264 MB

Nel mio caso, in qualche modo ovviamente, il mio driver del pallone stava usando ~ 3G

Non sono sicuro di quale sia il comando simile in Hyper-V per ottenere le statistiche del fumetto, ma sono sicuro che otterrai risultati simili


Grazie - sei decisamente su qualcosa. lsmod | grep hv_ mostra hv_balloon sul computer con poca memoria ma non sull'altro, quindi il modulo balloon viene caricato su uno e non sull'altro. E il comportamento assomiglia molto a questa descrizione .
Assylias,

Non sono sicuro di quale sia l'equivalente vmware-toolbox-cmdsu Hyper V però.
Assylias,

@assylias lo so, scusa. Mi sono guardato mentre scrivevo questa risposta e mi sono ritrovato vuoto. Tuttavia, se si scrive un programma che alloca rapidamente molta memoria, ciò potrebbe convincere l'hypervisor che la VM ha bisogno delle risorse. Simile al caso di test di sfratto della cache del disco, ma diversa causa principale.
Matt,

È possibile annullare la funzionalità della RAM dinamica in Hyper-V per risolvere questo problema.
Ashish Negi,

Non vedo davvero la soluzione qui, temo.
Jamie Hutber,

1

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

Risposta breve: il kernel utilizza la memoria buffer / cache per varie attività, come i file di cache. Questa memoria è disponibile per le applicazioni se è necessaria, quindi hai ragione nel dire che hai usato 944 MB.


Secondo quel link, 944 MB è la quantità di cache
assylias

2
No, 944 MB è la quantità di RAM effettivamente utilizzata dalle applicazioni e non disponibile per altre applicazioni. Rileggi quel post: "Linux (come la maggior parte dei sistemi operativi moderni) proverà sempre ad usare la RAM libera per la memorizzazione nella cache, quindi Mem: free sarà quasi sempre molto basso. Pertanto la linea - / + buffer / cache: viene mostrata, perché mostra quanta memoria è libera quando si ignorano le cache; le cache verranno liberate automaticamente se la memoria diventa scarsa, quindi non contano davvero. "
vik

sì e il - / + buffer / cache mostra 1,5 GB di mem gratuita ...
assylias

Si prega di comprendere che il 1485 libero nella cache dei buffer - / + NON è la quantità di memoria disponibile per le applicazioni sul sistema. La quantità di memoria effettivamente disponibile per le tue applicazioni è: (10017 - (9475 - 8531)) = 9073. Ha senso?
vik

Penso che tu abbia torto: la seconda riga esclude cache e buffer ed è l'effettivo utilizzo della memoria delle applicazioni (ed è quello che dice il tuo link ...).
Assylias,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.