Sistema Linux completamente sem resposta com muito espaço de troca livre

2

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
    
por Natan 03.01.2018 / 16:38

2 respostas

2

Eu encontrei o problema real. O aplicativo está sendo executado dentro do Docker, e o AWS bloqueia deliberadamente o uso do swap nos contêineres do ECS por algum motivo. Esse bloco não afetou o Windows porque não estávamos usando o ECS para gerenciar o docker antes.

Depois de conversar com o suporte, eles não suportam a troca dentro de contêineres e não sabem quando vão. Então, vou ter que sair do ECS e gerenciar o docker sozinho.

    
por 05.01.2018 / 12:31
1

Bem, seu erro pode ser bem pequeno. Esse alto valor de swappiness causará um problema com algumas configurações do sistema operacional. Tente um valor como 15. (Apenas uma nota: forçar seu sistema a preferir swap é uma idéia horrível. Seu sistema precisa usar RAM real para funcionar normalmente. [No caso de você não saber ou reverter isso, swappiness é a% de ram livre antes da troca ser usada, então 15 é que 85% da RAM deve ser usada antes da partição SWAP.])

Além disso, como você adicionou espaço de troca? Se você acabou de alterar as configurações e não criou uma nova partição, ou deixou erros no seu arquivo / etc / fstab, você será incapaz de usar swap, e todo o inferno vai quebrar o uso como o sistema tenta gravar em algo que não está lá ou não pode escrever para (ou algo muito mais interessante vai acontecer). Eu quebrei muito mais do que uma instalação através desses métodos.

    
por 03.01.2018 / 16:45