Recentemente, meu amigo me disse que é uma boa idéia desativar o swap nos servidores web linux com memória suficiente. Meu servidor tem 12 GB e atualmente usa 4 GB (sem contar cache e buffers) sob carga de pico.
Seu argumento era que, em uma situação normal, o servidor nunca utilizaria toda a sua RAM, portanto a única maneira de encontrar a situação OutOfMemory é devido a algum bug / ddos / etc. Portanto, no caso de a troca ser desativada, o sistema ficará sem memória que acabará travando a memória que está sobrecarregando o programa (provavelmente o processo do servidor da web) e provavelmente alguns outros processos. No caso de troca está ligada emele consumirá RAM e swap e, eventualmente, resultará na mesma falha, mas antes disso descarregará processos cruciais como o sshd para trocar e começará a realizar muitas operações de troca, resultando em grande desaceleração. Dessa forma, quando o sistema ddos pode entrar em uma condição completamente inutilizável devido a grandes atrasos e eu provavelmente não serei capaz de efetuar login e interromper o processo do servidor da web ou negar todo o tráfego de entrada (exceto o ssh).
Isto está certo? Estou faltando alguma coisa (como o fato de que a partição swap é muito útil de alguma forma, mesmo que eu tenha RAM suficiente)? Devo desligá-lo?
Respostas:
Eu diria que depende do seu caso de uso e o restante das respostas abordou isso muito bem. Afinal, 4G de swap é uma maneira barata de comprar alguma segurança. E sinto que esse baixo preço é o que está fazendo as pessoas não quererem desligá-lo.
Mas deixe-me responder com uma pergunta retórica. Se o dinheiro não é um problema e você pode escolher entre dois sistemas - um com 12G de RAM e 4G de troca e outro com 16G de RAM e sem troca - qual deles você escolheria? Infelizmente, a maioria das pessoas ainda responderia que escolheria 16G de RAM e ainda adicionaria 4G de troca, o que está perdendo meu ponto.
E em outra nota, eu pessoalmente acho um sistema swappy pior do que um sistema travado. Um sistema travado acionaria um servidor de backup em espera para assumir o controle muito mais cedo. E em uma configuração ativo-ativo (ou configuração com balanceamento de carga), um sistema travado seria retirado da rotação muito mais cedo. Uma vitória para o sistema no-swap novamente.
fonte
NÃO é recomendável desativar a troca, mesmo que você tenha memória suficiente. Se o seu servidor precisar de mais memória e não a tiver, ele irá travar. No entanto, isso pode ser evitado (até certo ponto) quando você tem uma área de troca.
Sim, o desempenho do servidor diminuirá ao usar a troca, mas pelo menos estará operacional e acessível. Em seguida, você pode planejar adicionar mais memória quando necessário, se o servidor começar a usar a troca.
Eu encontrei esta página falando sobre swap. Dê uma olhada na terceira seção.
Em vez de desativar a troca, você pode controlar a troca .
fonte
Não, não é uma boa ideia. 'algum processo enlouqueceu' significa que você já deve ter chamado proativamente
ulimit -d
no momento ou antes da hora da criação do processo para definir um limite na memória por segmento de dados do processo - e talvez um limite para o número de threads
ulimit -T
por processo. ulimit é seu amigo. Por favor, considere a leitura de um dos guias de ajuste de memória antes de desativar a troca. Você também pode alterar o parms do kernel para algumas coisas, para tentar lidar com ataques do DOS ou com programas ruins.
Veja desta maneira: A memória total do seu sistema é RAM + swap. Se você tem 12 GB de swap, você reduz efetivamente a capacidade da VM do sistema pela metade, desativando a troca. Péssima ideia. Isso não é um debate, na verdade, é simplesmente ler o que outras pessoas sabem de más experiências anteriores há anos. É possível que seu amigo precise ler também.
fonte
Como outros já disseram, você pode efetivamente parar seu servidor usando swap, exceto quando absolutamente necessário, mexendo no parâmetro "swappiness". Isso controla com que agressividade o kernel irá trocar as páginas de memória.
Você pode ver como está definido atualmente:
e você pode editá-lo "ao vivo" com (como root):
e para persistir, adicione o seguinte ao /etc/sysctl.conf:
fonte
Outra coisa boa que você pode fazer é trocar para a RAM usando o zRAM. Eu acho que essa é uma ótima ideia! Por desempenho, é como não ter troca, mas também evita falhas quando o sistema está muito carregado!
Veja isso:
http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html
Minha experiência: nesta máquina em que estou escrevendo agora, desabilitei a troca, porque tenho RAM de 4Gb (em 2009 foi muito!). Eu só tive alguns problemas, um deles estava abrindo como 127 fotos ao mesmo tempo por engano!
MAS .. esta é uma estação de trabalho e posso me dar ao luxo de reiniciar se travar. Em um servidor, acho melhor trocar, e a troca na RAM parece boa para mim.
fonte
Como já foi bastante esclarecido, essa não é uma boa ideia. Se nada mais, a troca oferece a você algum espaço para respirar quando as coisas não são bem normais. Por exemplo, em um sistema que eu olho, que normalmente recebe apenas alguns visitantes por dia, houve um pico de tráfego enorme causado por uma página mencionada em uma revista. Isso resultou no servidor da Web usando espaço de troca pela primeira vez desde que foi comissionado. Sem esse espaço de troca, as coisas não teriam ido muito bem.
fonte
Não é uma boa ideia. Você pode definir 2 arquivos de troca com prioridade diferente. Um menor que está em uso e outro maior que será usado no caso de o primeiro ser preenchido.
Além disso, vm.swappiness pode ajudá-lo a controlar a agressividade da troca de disco.
fonte
Se você inserir um 0 para vm.swappiness, isso não significa necessariamente que o sistema não será trocado. É um parâmetro para determinar a tendência agressiva do kerne para trocar, mas não desativa o swap.
Mais uma vez, a troca não é ruim, mas a debulha é. Dê uma olhada nos dados do sysstat e isso deve fornecer um bom indicador.
fonte