Devo desativar completamente o swap para linux webserver?

22

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?

Poma
fonte
6
Portanto, todas as respostas se resumem a afirmações de que 1. mais memória virtual é incondicionalmente melhor que menos e 2. deve haver alguma troca ativada porque é boa e nenhuma das quais está bem fundamentada.
precisa
2
É equivocado pensar que a troca se destina exclusivamente à memória 'reserva'. A troca é destinada a um local para colocar memória não utilizada (para que você possa usar sua memória real com mais eficiência). Você sempre deve trocar. Se você está com falta de memória, então está com falta de memória - ponto final. Esse é um problema de gerenciamento de capacidade - não tendência de troca. Eu tenho uma resposta bastante longa serverfault.com/a/332205/75118 que tenta explicar melhor as intenções da memória virtual.
Matthew Ife

Respostas:

27

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.

chutz
fonte
14

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 .

Khaled
fonte
1
Na situação que descrevi, ele consumirá tanto swap quanto RAM e também falhará. Está em execução por alguns meses e nunca usou mais de 30% de memória. Portanto, é muito improvável que ele salte para 100% tão rapidamente durante a operação normal. Portanto, se algum processo enlouqueceu e consumiu 8 GB, significa que ele consumirá o máximo de memória que o sistema operacional puder obter, isso significa tudo.
Poma
@ Poma, há outros benefícios do swap também. Além disso, você pode permitir que o sistema viva muito mais tempo quando você tiver uma troca. Isso ocorre porque o swap pode ser maior que a memória, dada a disponibilidade de unidades HD baratas.
Khaled
6

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.

jim mcnamara
fonte
5

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:

cat /proc/sys/vm/swappiness

e você pode editá-lo "ao vivo" com (como root):

# echo "10" > /proc/sys/vm/swappiness

e para persistir, adicione o seguinte ao /etc/sysctl.conf:

vm.swappiness=10
Orlando Richards
fonte
2

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.

CyberPlant
fonte
1

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.

John Gardeniers
fonte
0

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.

Dragos
fonte
0

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.

Soham Chakraborty
fonte