Eu tenho um problema com meus servidores Debian. Nós rodamos 4 servidores diferentes, todos com CPUs Intel e 128GB de RAM. Dois deles correm Wheezy, dois deles correm Jessie. Nós rodamos um software Java nesses sistemas, que está pesadamente usando memória e pode consumir toda a memória.
Para esses casos, eu instalei uma partição swap em cada servidor que é mantido em um RAID 1 rodando em 2 SSDs.
Problema com os sistemas Jessie: quando o sistema quase fica sem memória, ele inicia a troca. Isso é ajustado pelo parâmetro vm.swappiness = 10 e parece ok para mim. Mas a troca em si é feita com tanta intensidade que o sistema trava / congela totalmente. Há muito disco feito no disco que o sistema não está mais respondendo.
Eu fiz alguns testes em todos os sistemas e enchi artificialmente a RAM para 120% usando:
stress --vm-bytes $(awk '/MemFree/{printf "%d\n", $2 * 1.2;}' < /proc/meminfo)k --vm-keep -m 1
O sistema inicia a troca e congela enquanto a troca dos 20% está em execução. Após ~ 20s o sistema está de volta e utilizável novamente, mas durante o congelamento nada funciona mais.
É claro que esse comportamento não é aceitável para um sistema produtivo. O que eu esperaria é que a troca tenha uma prioridade alta, mas nunca use mais de 90% de todos os recursos do sistema para que o sistema ainda possa ser manipulado de alguma forma.
Ajustar o swappiness para diferentes valores não ajudou ..
Estamos usando os seguintes kernels:
Wheezy: Linux A 3.2.0-4-amd64 # 1 SMP Debian 3.2.68-1 + deb7u1 x86_64 GNU / Linux
Jessie: Linux B 3.16.0-4-amd64 # 1 SMP Debian 3.16.7-ckt20-1 + deb8u4 (2016-02-29) x86_64 GNU / Linux
Alguém encontrou o mesmo problema e encontrou uma solução?
Editar: Obrigado a todos pelos comentários e explicações. Claro que não quero usar swap como memória sobressalente. O uso de 120% foi apenas um teste. Na produção, os sistemas usam talvez 100.0001% da memória e já deixam de ser responsivos. No modo de produção com o nosso software em execução, há também uma alta frequência de alteração de dados para que o sistema possa estar ocupado apenas trocando uma quantidade muito pequena de dados o tempo todo.