kswap usando 100% da CPU, mesmo com 100 GB + de RAM disponíveis

5

Estou executando uma VM Centos 7 ESXi com quase 300 GB de RAM e 24 vCPUs.

A carga média é de 3 e os aplicativos quase nunca usam mais de 150 GB de RAM. O restante da memória disponível é usado pelo Linux para cache.

A questão é que quando o cache preenche a RAM disponível, dois processos kswapd começarão a usar 100% da CPU e de repente eu vejo que todas as CPUs também estão mostrando 99% do uso do sistema (não é espera ou usuário, é principalmente sys ).

Isso causará uma carga alta (100+) por vários minutos até que o sistema se recupere e a carga volte para 3 novamente.

Neste momento, não tenho uma partição de troca, mas mesmo quando tive uma, ocorreu este problema.

Uma "solução" que encontrei é executar o seguinte comando todos os dias:

 echo 3 > /proc/sys/vm/drop_caches

que descarta buffers / caches. Isso "corrigirá" o problema, pois o uso do cache nunca atinge 100%.

Minhas perguntas são:

  • Existe uma solução real para este problema?

  • O kernel do Linux não deve ser inteligente o suficiente para limpar as páginas de cache antigas da memória, em vez de iniciar o kswap?

Afinal de contas, pelo que entendi, a principal função da memória RAM é ser usada por aplicativos. O cache é apenas uma função secundária que pode ser descartada / ignorada se você não tiver memória suficiente.

A versão do meu kernel é 3.10.0-229.14.1.el7.x86_64.

    
por Fernando 04.12.2015 / 14:36

1 resposta

2

Parece que você está ficando sem RAM em um nó NUMA e o sistema está se debatendo tentando liberar memória nesse nó. Isso pode acontecer se você tiver um único processo usando grandes quantidades de memória, que (por padrão) é alocada preferencialmente no nó em que o processo está sendo executado.

Veja se isso ajuda:

sysctl -w vm.zone_reclaim_mode=0

Para uma descrição mais longa dos problemas que podem surgir com a política NUMA padrão na maioria dos sistemas, consulte link

    
por 26.01.2016 / 17:25