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.