Eu tenho um serviço .NET (Core 2.0) que mudei do Windows para instâncias do Linux na AWS. As instâncias são micro com 1 GB de RAM.
Eu adicionei 1Gb de espaço de troca à instância do Linux e também configurei swappiness = 100, mas o servidor congela quando a memória física é preenchida. O processo em si diminui a ponto de quase parar e até mesmo pressionar ENTER no bash leva 10 segundos, às vezes, para que a nova linha apareça.
Executando top
Eu vejo a memória livre normalmente 10, 20mb. O processo usando 800Mb + de RAM, e swap está sempre quase vazio, com uso de 20mb máx. Mesmo deixando lá por uma hora não trocou mais do mesmo.
Eu posso ver que os créditos de disco e CPU na AWS estão em quase 100%, por isso não está limitando o uso de recursos. Além disso, há cerca de uma centena dessas instâncias, e eu as substituí várias vezes, o comportamento é sempre o mesmo, por isso não parece um problema instância incorreta .
O que me incomoda é que isso não aconteceu no Windows, e as instâncias do linux usam cerca de 200MB de memória a menos para o sistema básico.
Existe alguma configuração que eu preciso ajustar além de swappiness para fazer o Linux mover mais memória para trocar?
Edit: A troca está configurada corretamente através do cloud-init, e está sobrevivendo a reinicializações:
Configuração:
fallocate -l 1024M /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
sysctl vm.swappiness=100
free -m
após a inicialização:
total used free shared buffers cached
Mem: 993 232 760 0 7 152
-/+ buffers/cache: 72 921
Swap: 1023 0 1023