Lentidão ou falhas causadas por exaustão de memória em máquinas virtuais

By Denis Passos

A exaustão de memória é a causa frequente de problemas relacionados a lentidão e/ou falhas de aplicativos e sistema operacional e metodo de resolução baseia-se em identificar o maior consumidor de memória ou “ofensor” para então analisar se o consumo é adequado ou inadequado e tomar as ações necessárias como limitar a quantidade de memória disponível para o aplicativo identificado ou remover o driver/aplicativo dependendo do cenário.

Existem várias ferramentas disponíveis para analisar o consumo de memória por parte dos aplicativos e drivers no sistema operacional como Task Manager, Performance Monitor, Poolmon, Process Explorer, RAMMap, etc..

Vmware Memory Balloning

Frequentemente encontramos no suporte Microsoft incidentes com os sintomas descritos acima em máquinas virtuais causados por uma técnica de gerenciamento de memória da Vmware chamada de Memory Ballooning (VMMEMCTL.SYS)

A técnica de memory ballonning baseia-se em satisfazer a demanda de memória no sistema Host usando a memória disponível no sistema operacional Guest.

Neste cenário é possível notar que existe uma grande quantidade de memória sendo consumida através do Task Manager ou Gerenciador de Tarefas porém não é possível identificar o consumidor na guia Processes ou Processos.

Caracteristicas de um ambiente com memory ballooning ativado:

É possível notar a quantidade de memória utilizada como “Driver Locked” em Use Counts ao exibir o consumo de memória através da ferramenta RAMMAP (Sysinternals)

clip_image001

Através do MSINFO32 -> Software Environment -> System Drivers é possível identificar que o driver VMMEMCTL.SYS está em execução “Running”

O driver (VMMEMCTL.SYS) que compõe o sistema de Memory Ballooning é instalado com Vmware Tools no sistema operacional Windows (Guest)

clip_image002

Através do console da Vmware -> Resource Allocation tambem é possível graficamente identificar a alocação de memória pelo mecanismo de ballooning.

Solução:

1. Desabilitar/Remover o driver VMMEMCTL.SYS ou ajustar/limitar quantidade de memória que o mecanismo de ballooning pode usar seguindo os artigos diretamente do site da Vmware

Balloon driver retains hold on memory causing virtual machine guest operating system performance issues

https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1003470

Disabling balloon driver

https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1002586

Para mais informações sobre o mecanismo, consulte documentação abaixo:

Memory Balloon (vmmemctl) Driver

https://pubs.vmware.com/vi3/resmgmt/wwhelp/wwhimpl/common/html/wwhelp.htm?context=resmgmt&file=vc_advanced_mgmt.11.24.html

2. Preferencialmente o consumo de memoria pelo ballooning deve ser limitado ou desabilitado seguindo os artigos acima da Vmare, caso contrário é possível desabilitar o driver através do Device Manager:

Abra Device Manager

Menu View -> Escolha "Show hidden devices"

Vá para Non-plug and play drivers -> abra a lista

Localize “VMware Server Memory Controller” (VMMEMCTL.SYS) e abra as propriedades

Guia Driver -> Escolha "Stop"