Alto uso de memória, mas nenhum processo está usando

17

Eu corro free -mem uma VM debian em execução no Hyper-V:

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

Assim, dos meus 10 GB de memória, 8,5 GB estão em uso e apenas 1500 MB são gratuitos (excluindo cache).

Mas luto para descobrir o que está usando a memória. A saída de ps aux | awk '{sum+=$6} END {print sum / 1024}', que deve adicionar a utilização do RSS é:

1005.2

Em outras palavras, meus processos usam apenas 1 GB de memória, mas o sistema como um todo (excluindo o cache) usa 8,5 GB.

O que poderia estar usando os outros 7,5 GB?

ps: Eu tenho outro servidor com uma configuração semelhante que mostra mem usado de 1200 (mem livre = 8,8 GB) e a soma do uso de RSS no ps é 900, o que está mais próximo do que eu esperaria ...


EDITAR

cat /proc/meminfo na máquina 1 (pouca memória):

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 na máquina 2 (uso normal de memória):

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
assilias
fonte

Respostas:

15

Entendo que você esteja usando o Hyper-V, mas os conceitos são semelhantes. Talvez isso o coloque no caminho certo.

É provável que seu problema ocorra devido ao balão de memória virtual, uma técnica que o hipervisor usa para otimizar a memória. Veja este link para uma descrição

Observei exatamente os mesmos sintomas com minhas VMs no vSphere. Uma máquina 4G sem nada em execução relataria 30 milhões usados ​​pelo cache, mas mais de 3G "usado" na linha "- / + buffers".

Aqui está um exemplo de saída do comando de estatísticas do VMWare. Isso mostra o quão perto de 3G está sendo aplicado o valor "usado":

vmware-toolbox-cmd stat balloon
3264 MB

No meu caso, obviamente, meu driver de balão estava usando ~ 3G

Não tenho certeza de qual comando semelhante no Hyper-V é obter suas estatísticas de balão, mas tenho certeza de que você obterá resultados semelhantes

Matt
fonte
Obrigado - você está definitivamente em algo. lsmod | grep hv_ mostra hv_balloon na máquina com pouca memória, mas não na outra - portanto, o módulo do balão é carregado em uma e não na outra. E o comportamento se parece muito com esta descrição .
assylias
Não sei ao certo qual é o equivalente vmware-toolbox-cmdno Hyper V.
assylias
@assylias eu sei, desculpe. Eu me olhei enquanto escrevia esta resposta e vim vazio. No entanto, se você escrever um programa que aloque rapidamente muita memória, isso pode convencer o hipervisor de que sua VM precisa dos recursos. Semelhante ao caso de teste de remoção de cache de disco, mas causa raiz diferente.
Matt
Você pode desabilitar o recurso de ram dinâmica no Hyper-V para resolver esse problema.
Ashish Negi
Eu realmente não vejo a solução aqui, estou com medo.
21818 Jamie Hutber #
1

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

Resposta curta: o kernel usa os buffers / memória cache para várias tarefas, como armazenar arquivos em cache. Essa memória está disponível para aplicativos, se necessário, portanto, você está certo ao dizer que possui 944 MB usados.

vik
fonte
De acordo com esse link, 944MB é a quantidade de cache
assylias
2
Não, 944 MB é a quantidade de RAM realmente usada por aplicativos e não está disponível para outros aplicativos. Releia essa postagem: "O Linux (como o sistema operacional mais moderno) sempre tentará usar RAM livre para armazenar coisas em cache, então Mem: free quase sempre será muito baixo. Portanto, a linha - / + buffers / cache: é exibida, porque mostra quanta memória está livre ao ignorar caches; os caches serão liberados automaticamente se a memória ficar escassa, para que eles realmente não importem. "
vik
sim e o - / + buffers / cache mostra 1,5 GB de memória livre ...
assylias
Por favor, entenda que o 1485 livre no cache de buffers - / + NÃO é a quantidade de memória disponível para aplicativos no sistema. A quantidade de memória realmente disponível para seus aplicativos é: (10017 - (9475 - 8531)) = 9073. Isso faz sentido?
vik
Eu acho que você está errado: a segunda linha exclui o cache e os buffers e é a utilização real da memória dos aplicativos (e é isso que o seu link diz ...).
Assylias