Devo desligar completamente o swap para o servidor web linux?

21

Recentemente meu amigo me disse que é uma boa idéia desligar o swap em servidores web linux com memória suficiente. Meu servidor tem 12 GB e atualmente usa 4 GB (sem contar o cache e os buffers) sob carga de pico.

Seu argumento era que, em uma situação normal, o servidor nunca usaria toda a sua RAM, então a única maneira de encontrar a situação OutOfMemory é devido a algum bug / ddos / etc. Assim, no caso de swap ser desligado o sistema ficará sem memória que acabará por travar o programa que sobrecarrega a memória (provavelmente o processo do servidor web) e provavelmente alguns outros processos. No caso de swap em ele irá comer RAM e swap e eventualmente irá resultar no mesmo crash, mas antes disso irá descarregar processos cruciais como sshd para swap e começar a fazer um monte de operações de swap resultando em grande desaceleração. Desta forma, quando sob o sistema ddos pode entrar em uma condição completamente inutilizável devido a enormes atrasos e eu provavelmente não será capaz de log in e matar o processo do servidor web ou negar todo o tráfego de entrada (todos, mas ssh).

Isso está certo? Estou faltando alguma coisa (como o fato de que a partição swap é muito útil de alguma forma, mesmo se eu tiver RAM suficiente)? Devo desligar?

    
por Poma 22.01.2012 / 12:19

8 respostas

26

Eu diria que depende do seu caso de uso e o resto das respostas abordou isso muito bem. 4G de swap são, afinal, uma maneira barata de comprar alguma segurança. E eu 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ê tem uma escolha entre dois sistemas - um com 12G de RAM e 4G de swap, e outro com 16G de RAM e sem swap - qual você escolheria? Infelizmente, a maioria das pessoas ainda responderia que eles escolheriam 16G de RAM e ainda adicionariam 4G de swap, o que não faz sentido.

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 muito mais cedo. E em uma configuração ativa-ativa (ou balanceada por carga), um sistema travado seria retirado da rotação muito mais cedo. Uma vitória para o sistema não-swap novamente.

    
por 13.06.2012 / 12:07
14

NÃO é recomendado desativar o swap, mesmo que você tenha memória suficiente. Se o seu servidor precisar de mais memória e não conseguir, ele irá falhar. No entanto, isso pode ser evitado (até certo ponto) quando você tem uma área de troca.

Sim, o desempenho do seu servidor será prejudicado ao usar o swap, mas pelo menos estará operacional e acessível. Então, você pode planejar a adição de mais memória quando necessário se o seu servidor começar a usar swap.

Eu encontrei esta página falando sobre swap. Dê uma olhada na 3ª seção.

Em vez de desativar o swap, você pode controlar a permuta .

    
por 22.01.2012 / 12:25
6

Não, não é uma boa ideia. 'algum processo ficou louco' significa que você já deve ter chamado proativamente

ulimit -d

em ou antes do tempo de criação do processo para definir um limite na memória do segmento de dados por processo - e talvez um limite para o número de threads

ulimit -T

por processo. ulimit é seu amigo. Por favor, considere a leitura de uma das guias de ajuste de memória antes de desligar a troca. Você pode alterar os parms do kernel e algumas coisas para tentar lidar com ataques do DOS ou programas ruins.

Veja desta maneira: A memória total no seu sistema é RAM + swap. Se você tiver 12 GB de swap, basta cortar efetivamente a capacidade da VM do sistema pela metade, desabilitando a troca. Péssima ideia. Isso não é um debate, na verdade, é simplesmente ler o que outras pessoas souberam de experiências ruins anteriores durante anos. É possível que seu amigo precise ler também.

    
por 23.01.2012 / 03:27
4

Como outros já disseram, você pode efetivamente parar seu servidor usando swap, exceto quando absolutamente necessário, mexendo com o parâmetro "swappiness". Isso controla o quão agressivamente o kernel irá trocar as páginas de memória.

Você pode ver com o que 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
    
por 13.06.2012 / 13:20
2

Outra coisa boa que você pode fazer é trocar para a RAM usando o zRAM. Eu acho que isso é uma ótima ideia! Para o desempenho, é como não ter swap em tudo, mas também previne as falhas quando o sistema está muito carregado!

Veja isso:

link

Minha experiência: nesta máquina onde estou escrevendo agora, desabilitei a troca, pois tenho 4Gb de RAM (em 2009 foi muito!). Eu só experimentei um par de problemas, um deles estava abrindo como 127 fotos ao mesmo tempo por engano!

MAS .. esta é uma estação de trabalho, e eu posso dar ao luxo de reiniciar se ele trava. Em um servidor, acho melhor ter swap, e o swap-in-RAM parece bom para mim.

    
por 13.06.2012 / 08:44
1

Como já ficou bem claro, isso não é uma boa ideia. Se nada mais, o swap te dá um pouco de espaço para respirar quando as coisas não são normais. por exemplo. Em um sistema que eu vejo, que normalmente tem apenas alguns visitantes por dia, houve um enorme pico de tráfego causado por uma página sendo mencionada em uma revista. Isso resultou no servidor da Web usando o espaço de troca pela primeira vez desde que foi comissionado. Sem esse espaço de troca, as coisas não teriam corrido muito bem.

    
por 13.06.2012 / 11:45
0

Não é uma boa ideia. Você pode definir 2 arquivos de troca com prioridade diferente. Um menor que está em uso e um maior que será usado caso o primeiro seja preenchido.

Além disso, o vm.swappiness pode ajudar você a controlar a agressividade da troca de disco.

    
por 13.06.2012 / 09:34
0

Se você inserir 0 a vm.swappiness, isso não significa necessariamente que o sistema não irá trocar. É um parâmetro para determinar quão agressiva a tendência de kerne seria trocar, mas não desativa o swap.

Mais uma vez, a troca não é ruim, mas é a surra. Dê uma olhada nos dados do sysstat e isso deve dar um bom indicativo.

    
por 13.06.2012 / 15:44