Uso elevado de memoria pero ningún proceso lo está utilizando

17

Ejecuto free -men una máquina virtual Debian que se ejecuta en Hyper-V:

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

Entonces, de mis 10 GB de memoria, 8,5 GB están en uso y solo 1500 MB están libres (excluyendo caché).

Pero me cuesta encontrar lo que está usando la memoria. La salida de ps aux | awk '{sum+=$6} END {print sum / 1024}', que se supone que suma la utilización de RSS es:

1005.2

En otras palabras, mis procesos solo usan 1GB de memoria, pero el sistema en su conjunto (excluyendo la caché) usa 8.5GB.

¿Qué podría estar usando los otros 7.5GB?

ps: tengo otro servidor con una configuración similar que muestra mem de 1200 usados ​​(mem gratis = 8.8GB) y la suma del uso de RSS en ps es 900, que está más cerca de lo que esperaría ...


EDITAR

cat /proc/meminfo en la máquina 1 (poca memoria):

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 en la máquina 2 (uso de memoria normal):

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
asilias
fuente

Respuestas:

15

Entiendo que estás usando Hyper-V, pero los conceptos son similares. Tal vez esto te pondrá en el camino correcto.

Es probable que su problema se deba al aumento de la memoria virtual, una técnica que utiliza el hipervisor para optimizar la memoria. Vea este enlace para una descripción

Observé exactamente sus mismos síntomas con mis máquinas virtuales en vSphere. Una máquina 4G sin nada que se ejecute en ella reportaría 30M usados ​​por caché, pero más de 3G "usado" en la línea "- / + buffers".

Aquí hay un ejemplo de salida del comando de estadísticas de VMWare. Esto muestra qué tan cerca de 3G se está agregando a mi cantidad "usada":

vmware-toolbox-cmd stat balloon
3264 MB

En mi caso, algo obvio, mi conductor de globo estaba usando ~ 3G

No estoy seguro de cuál es el comando similar en Hyper-V para obtener las estadísticas de tu globo, pero estoy seguro de que obtendrás resultados similares

Mate
fuente
Gracias, definitivamente estás en algo. lsmod | grep hv_ muestra hv_balloon en la máquina con poca memoria pero no en la otra, por lo que el módulo de globo se carga en una y no en la otra. Y el comportamiento se parece mucho a esta descripción .
Assylias
Sin vmware-toolbox-cmdembargo, no estoy seguro de cuál es el equivalente a Hyper V.
Assylias
@assylias Lo sé, lo siento. Me miré mientras escribía esta respuesta y me quedé vacío. Sin embargo, si escribe un programa que rápidamente asigna mucha memoria, eso puede convencer al hipervisor de que su VM necesita los recursos. Similar al caso de prueba de desalojo de caché de disco, pero causa raíz diferente.
Matt
Puede deshabilitar la función de memoria RAM dinámica en Hyper-V para resolver este problema.
Ashish Negi el
Realmente no veo la solución aquí, me temo.
Jamie Hutber el
1

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

Respuesta corta: el kernel utiliza las memorias intermedias / memoria caché para diversas tareas, como el almacenamiento en caché de archivos. Esta memoria está disponible para las aplicaciones si es necesaria, por lo que tiene razón al decir que tiene 944 MB utilizados.

vik
fuente
De acuerdo con ese enlace, 944MB es la cantidad de caché
asilias
2
No, 944 MB es la cantidad de RAM realmente utilizada por las aplicaciones y no está disponible para otras aplicaciones. Vuelva a leer esa publicación: "Linux (como la mayoría de los sistemas operativos modernos) siempre intentará usar RAM libre para almacenar en caché, por lo que Mem: free casi siempre será muy bajo. Por lo tanto, se muestra la línea - / + buffers / cache: porque muestra cuánta memoria está libre al ignorar los cachés; los cachés se liberarán automáticamente si la memoria escasea, por lo que realmente no importan ".
vik
sí y el - / + buffers / cache muestra 1.5GB de memoria libre ...
assylias
Por favor, comprenda que el 1485 libre en el caché de búferes - / + NO es la cantidad de memoria disponible para las aplicaciones en el sistema. La cantidad de memoria realmente disponible para sus aplicaciones es: (10017 - (9475 - 8531)) = 9073. ¿Tiene sentido?
vik
Creo que está equivocado: la segunda línea excluye el caché y las memorias intermedias y es la utilización real de la memoria de las aplicaciones (y eso es lo que dice su enlace ...).
Assylias