Eu tenho um host executando o Proxmox com algumas VMs. Devido a alguma imprevisibilidade com o uso de memória de alguns aplicativos e ao desejo de fornecer memória a algumas VMs (como um banco de dados) para o cache de páginas quando havia memória disponível, provisionei memória em excesso.
Tentei testar a confiabilidade dessa configuração tentando usar mais memória no total do que o host possui, e esse OOM eliminou a VM, em vez de tentar recuperar o cache da página das outras VMs.
Há algo que eu possa fazer para permitir que o driver do balão recupere a memória ou estou entendendo mal como funciona o balão de memória?
O provisionamento excessivo de memória para convidados da VM sempre corre o risco de se tornar um problema muito grave no caso de mudança de carga. Além disso, o balão torna o planejamento da capacidade mais complicado.
Primeiro, balão. Significa que um convidado consciente reserva a diferença entre sua memória máxima e a atual, deixando alguma disponível para o host. Confirme se seus convidados têm os drivers necessários, provavelmente as distribuições de servidor Linux têm. O Linux KVM exige que o usuário altere o tamanho atual; Presumo que você não tenha ajustado o tamanho do balão manualmente.
A distribuição Proxmox é diferente. pvstatd é capaz de balão automático , onde ajusta o tamanho do convidado com base em seus compartilhamentos de memória configurados e na memória do host disponível. Descubra quais são os compartilhamentos configurados dos convidados e leia os logs para saber quais eventos de balão aconteceram.
Digamos que um convidado seja iniciado no limite máximo da capacidade de memória. O Host aloca alguns GB de memória no processo. Embora o gerenciamento de memória do Linux seja preguiçoso no uso de páginas de memória física, não demorará muito até que uma quantidade significativa de memória convidada seja referenciada. Enquanto isso, levará algum tempo até que o Proxmox perceba e ajuste automaticamente os balões. Os convidados do Linux, em particular, podem abrir mão dos caches muito rapidamente, mas esse aumento está se movendo na velocidade das ferramentas de monitoramento, não na velocidade do kernel. Não é de surpreender que o gerenciamento de memória do sistema operacional host possa esgotar suas opções de recuperação e eliminar o OOM.
Uma opção segura da qual você não vai gostar é não provisionar demais a memória dos convidados, o que também significa que não há balão. Dimensione os bancos de dados de acordo com sua memória compartilhada fixa ou qualquer outro algoritmo. Dimensione os servidores de aplicativos para aproximadamente a memória máxima esperada ou observada. O gasto em memória adquire desempenho previsível.
Almeje a utilização de convidados e hosts em algum lugar abaixo do máximo. Talvez 80% utilizados, embora os fluxos de trabalho variem enormemente, então o que você pode fazer será diferente. Esse buffer deixa espaço para coisas administrativas, como a memória do sistema do kernel, e o restante para caches.
Se você quiser superprovisionar, seu planejamento de capacidade precisa ser mais sofisticado. Reduza o tamanho dos convidados até obter uma carga que não sobrecarregue o host. Ajuste os balões de convidados antes de receber novos convidados no limite da capacidade. Estude e ajuste o sistema automático do Proxmox e teste se ele é útil.