CentOS Quanto SWAP por 16GB de RAM?

11

Quanto SWAP você daria a uma instalação do CentOS em um Quad Core XEON duplo com 16 GB de RAM que executará um site php com um back-end mysql - carga média / pesada?


fonte

Respostas:

20

Não mais que um show ou dois - você quer um pouco de troca disponível, apenas por precaução e porque ajuda as coisas a funcionarem um pouco melhor, mas se você chegar ao ponto em que está trocando muito, a máquina estará funcionando para ser inútil - e em uma situação catastrófica real, você está melhor com um espaço de troca menor, porque então você acionará o assassino do OOM mais cedo ou mais tarde.

genehack
fonte
7
E lembre-se que você sempre pode adicionar mais espaço de swap mais tarde, se for necessário, fazendo algum espaço e criar um novo volume (se estiver usando LVM) ou usando um arquivo como swap com algo parecidodd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
David Spillett
3
Como uma observação lateral, você pode controlar o grau de troca ajustando o valor / proc / sys / vm / swappiness.
David
2
Vou ter que discordar de alguns pontos aqui. . . Primeiro, o disco é barato, você pode jogar alguns GB nele. Em segundo lugar, o OOM killer pode derrubar toda a sua caixa se você tiver azar. Confiar nele de alguma forma ou considerar melhor acionar o assassino da OOM é uma péssima idéia. Pensar que uma caixa com mangueira potencial é melhor que uma desaceleração em potencial também é uma má idéia. O único momento razoável seria se você tivesse uma configuração muito específica planejada para essa situação.
Christopher Cashell
observação lateral: geralmente é preferível definir a troca em uma partição e não em um arquivo para evitar sobrecargas e simplificar o processo de inicialização. no entanto, usar um arquivo funcionará. 4GB é tudo o que qualquer sistema deve precisar, eu duvido que você vai ficar muito trocou de qualquer maneira com 16GB de RAM
Silverfire
Na verdade, de acordo com Andrew Morton, o desempenho deve ser o mesmo entre um arquivo de troca
Journeyman Geek
8

Peço desculpas pela resposta muito longa. Eu tenho vontade de colocar essas coisas em algum lugar acessível por um tempo!

TLDR; Teoricamente falando, a resposta seria "provavelmente não menos que a quantidade total de memória residente que todos os seus aplicativos desejam usar"

Vou tentar explicar se você fica comigo ..

Um pouco sobre memória virtual

Sinto que hoje em dia existe um equívoco comum sobre qual é o valor do swap e qual é a sua finalidade. Geralmente, considera-se que o swap é um "banco de reserva" para memória quando você está com pouca memória. Sim, isso é parcialmente verdade, mas o kernel não deseja usar seu swap como um banco de reserva . Além disso, o kernel nunca deseja invocar o disco para obter os dados que você procura!

No espaço do aplicativo, há várias coisas que o kernel manterá na memória.

  • Dados do arquivo mapeado.
  • sistemas de arquivos tmpfs.
  • Memória bruta do aplicativo alocada em tempo de execução.
  • Código do aplicativo (como itens no segmento de dados dos formatos ELF)
  • Dados de arquivo com mapas particulares.

Para fins de gerenciamento de memória, a alocação de memória é apoiada de uma forma ou de outra por um dispositivo de suporte.

A memória suportada por arquivo é a memória proveniente de um arquivo e em um sistema operacional típico compõe a grande maioria da alocação de memória no sistema. Inclui arquivos como bibliotecas compartilhadas que foram carregadas, arquivos lidos do disco e armazenados no cache da página e arquivos mmapedados do disco (de fato, o kernel não faz distinção de páginas entre os arquivos no cache da página e os arquivos mapeados como essencialmente a mesma coisa).

A melhor coisa sobre essa memória do ponto de vista dos kernels é o seu descartável, ou seja, é possível despejar essas páginas se você precisar da memória para outra coisa e é exatamente isso que o cache da página faz se a memória de repente for um requisito.

Memória anonimamente apoiada é uma questão diferente. A memória desta região é anônima porque, bem, não há arquivo no disco que realmente contenha esses dados. Isso normalmente é composto da pilha de aplicativos, da pilha, de qualquer coisa nos dados tmpfs e mmapped que é privada e foi modificada (uma vez que não é possível sincronizar essas coisas de volta ao disco). Como não há arquivo válido no sistema de arquivos para gravar essas páginas se elas mudarem, a memória de backup anônima é suportada pela mídia de troca.

Agora, o kernel sabe que, quando a memória é escassa, é muito mais barato abandonar a memória com backup de arquivo que a memória mapeada anonimamente, porque os dados anônimos têm uma chance muito maior de ser "suja" que os dados de backup de arquivo, na verdade, por padrão, o kernel classifica a memória de backup anonimamente como 80 vezes mais valiosa do que a memória de arquivo e isso é realmente o que o modificador de swappiness faz no linux (veja este post aqui se você quiser saber o que exatamente o parâmetro swappiness está alterando).

O pior cenário

O pior cenário possível, quando se trata de um servidor fora de controle e de OOM, é baseado no fato de que ele passa muito tempo processando solicitações de E / S do que atendendo a solicitações de alocação de memória. Existem duas condições que podem chamar esse critério.

  • Trocar memória anônima o tempo todo para buscar páginas sob demanda ou alocar mais páginas para um aplicativo.
  • Gastar muito tempo buscando dados do disco porque não está na memória do que você dedica para executar processos que desejam tempo de CPU.

O primeiro, é o pensamento comum do problema. Ou seja, como grande parte da memória vive dentro do swap, é necessário trocar a memória anônima da RAM, colocá-la novamente em swap, depois pegar algo do swap e colocá-la na RAM real. Essa operação é muito cara, diminuindo a velocidade da máquina até o ponto em que pode se tornar uma situação irrecuperável (pois há mais coisas na fila para demandas de páginas do que as que podem ser veiculadas na E / S).

O segundo é menos considerado, mas igualmente importante. Se você alocar quase toda a sua memória para dados reais de aplicativos - você não vai durar muito. Quase todo aplicativo depende da leitura de arquivos do sistema de arquivos para operar, isso pode ocorrer porque algumas instruções estão em uma biblioteca compartilhada ou porque você precisa ler o /etc/resolv.conf para uma chamada de biblioteca ou qualquer outro propósito. É totalmente plausível interromper um sistema operacional - mas possui memória suficiente para atender a todos os seus aplicativos, mas, como a fila de pedidos de E / S requer muitas solicitações, nada tem a chance de concluir corretamente.

O que o kernel quer fazer com sua troca

O kernel quer usar o seu swap para se livrar das páginas que estão desperdiçando memória, para que possa usá-la para outra coisa.

Basicamente, em operação normal, o kernel adora preencher agressivamente o cache da página com dados lidos no disco, isso significa que ele não lerá o disco para os mesmos dados. Esse é um bom design e pode reduzir enormemente a E / S. Agora, pode ser que você tenha algum aplicativo na memória que durma por 3 dias, que acorde, faça um monte de trabalho e que durma mais 3 dias.

O que o kernel gostaria de fazer com esses dados é trocá-lo para criar espaço para a atividade do sistema de arquivos, já que você tem uma chance muito maior de realmente usar essas páginas com mais frequência do que as páginas usadas para seu aplicativo. Trocar, nesse sentido, pode ser uma transação de 16kb para sua mídia de troca que você dificilmente sentirá, mas, em troca, liberou 16kb de memória que poderia ser usada para armazenar quatro arquivos de dados.

Para que o kernel não deseja usar swap

Definitivamente, o kernel não deseja usar seu swap para alocar mais memória anônima trocando outras memórias anônimas; essa é a situação na qual as pessoas se preocupam mais e com razão.

No entanto, devo salientar que, se você alocou tanta memória que o kernel não tem escolha a não ser fazer isso, esse é um problema de configuração dos administradores do sistema, não do próprio kernel - apenas tentando fazer o melhor pelo opções que você deu!

Se você tem uma quantidade enorme de trocas, aumenta a chance de usá-las?

Não! Se você tem 1G de ram e 4G de swap, não há 80% de chance de seus dados serem trocados! O kernel quer usar a troca somente quando as páginas na memória puderem ser melhor servidas fazendo outra coisa!

É vantajoso não usar swap

Eu nunca faria isso. A troca permite que o O / S se livre da memória que você precisa, mas nunca está em uso. Se você não tiver uma troca, você apenas engolirá a memória que nunca mais voltará, pelo que poderá obter uma melhoria significativa no desempenho, permitindo, digamos, o cache da página.

Qual é a melhor troca para ter

Teoricamente falando, descubra quanta memória residente + 20% para segurança, como chamadas de bibliotecas reentrantes que precisam alocar memória da pilha - defina sua troca para esse valor. Isso (teoricamente, de qualquer maneira) permitiria ao sistema operacional trocar toda a memória anônima se fosse necessário abrir caminho para algo mais útil.

Se eu tiver a oportunidade do kernel de trocar tudo o que é perigoso, certo?

Lembre-se, o kernel não está querendo trocar para dar lugar a mais alocação de memória anônima aqui, apenas trocará páginas que não estão sendo usadas para favorecer outra coisa que fará melhor uso do espaço.

Se você estiver trocando memória anonômica apenas para alocar a partir de mais memória anônima, estará fazendo algo errado e precisará de mais RAM ou para ajustar novamente sua pilha de aplicativos.

Quanta RAM você precisaria

Você precisa permitir RAM suficiente para executar todos os seus aplicativos, é claro, mas provavelmente deve permitir 2G extras de RAM para o pagecache preencher - talvez mais. O cache da página torna seu computador muito mais rápido e seus discos duram mais. Se você pensa em executar um servidor da web, ter ainda mais para o pagecache é uma boa idéia, devido à grande quantidade de conteúdo estático, você pode recuperar e reutilizar o pagecache que seria veiculado (se a taxa de transferência do servidor da web for 5mb / s, você realmente não quer recuperar o conteúdo de 5mb / s que você está gerando do seu disco!).

O que fazer se você realmente não confiar no Linux para trocar corretamente

Se você está realmente preocupado, pode alocar mais memória do que você possui:

  • Defina seu valor de swap para não mais do que você RAM
  • Defina / proc / sys / vm / overcommit_memory como 2
  • Defina / proc / sys / vm / overcommit_ratio como um valor que nunca pode realmente exceder os limites físicos de RAM. Veja a documentação do kernel para descobrir qual seria esse número para você.

Qual é a melhor maneira de ajustar minha memória para meu aplicativo

  • Entenda o que a troca realmente faz.
  • Use CGroups para alocar os recursos corretos por aplicativo.
  • Altere o modo de confirmação excessiva mencionado acima para fazer o sistema operacional impor limites estritos.
  • Use o cgroups como acima para definir as prioridades do OOM nos aplicativos que você realmente deseja manter se estiver com falta de memória e no aplicativo que realmente deseja abandonar se estiver com falta de memória.

O fornecedor recomenda uma configuração diferente.

Ouça isso em seu lugar. Alguns aplicativos são escritos de tal maneira que invocam deliberadamente o kernel para ter suas páginas ativas sobre todos os outros. Este é um truque desagradável para ser honesto, mas quebra a capacidade dos kernels de gerenciar perfeitamente a memória quando isso acontece. Se o seu fornecedor está fornecendo detalhes específicos, eles provavelmente se enquadram nessa categoria e ouvem o que dizem.

Em suma

  • A troca deve ser usada como um local para desperdiçar memória. Não como 'memória sobressalente'
  • Ter grandes quantidades de swap não afeta em nada as suas chances de usá-lo.
  • O kernel realmente quer impedi-lo de acessar o disco para seus dados. Isso se aplica da mesma forma - se não for mais igualmente ao cache da página, assim como para trocar espaço.
  • O kernel fará o possível para honrar a configuração que você definir para os aplicativos executados. Mas não se surpreenda se você OOM se tiver 500 filhos apache, todos ocupando 32 milhões de memória. Isso é uma falha na configuração escolhida, não no gerenciamento de memória.

O kernel geralmente faz um bom trabalho ao gerenciar a memória virtual corretamente. É quase sempre o caso do seu aplicativo alocar mais memória do que você poderia esperar trabalhar e é isso que está causando um OOM.

O swap costumava ser usado como 'memória sobressalente', mas não é mais seu objetivo principal, então não pense em usá-lo dessa maneira. Em vez disso, avalie que seu kernel provavelmente sabe melhor para o que deseja usar sua memória. Dê espaço para tomar essas decisões e você se beneficiará de uma melhoria geral de desempenho.

Matthew Ife
fonte
2

Do documento "Servidor Oracle 10g no Red Hat® Enterprise Linux® 5 Recomendações de implantação".

A Oracle fornece recomendações genéricas sobre o tamanho da troca na MetaLink Note 169706.1. Essas recomendações podem levar à criação de um espaço de troca muito grande em sistemas com grande quantidade de memória. A troca muito grande pode causar severa degradação do desempenho do sistema e pode ser resolvida reduzindo o espaço de troca. A Red Hat não recomenda alocar mais de 4 GB para troca no Red Hat Enterprise Linux 5.

Portanto, para 16 GB você não deve ter mais do que 4 GB de swap.

PS. Também vale a pena notar que o invocado oomé quase sempre melhor do que o processo de troca inutilizável usando toda a largura de banda de E / S.

SaveTheRbtz
fonte
-1

Pelo que me lembro da documentação do linux: Se o seu ram for maior que 2gb, você troca = (ramSize + 2). Se for menor, você troca = (ramSize * 2)

MKN Web Solutions
fonte
-2

Encontrei este documento para você, ele deve ajudá-lo a tomar essa decisão, aqui está: O que é o Swap Space? , mas nenhuma das respostas acima está correta

alexus
fonte
1
O documento ao qual você vinculou não está de acordo. Seguir a regra declarada de "para mais, a quantidade de RAM de 2 Gb de RAM acima de 2 Gb" daria uma troca de 1 Gb para a RAM 3Gb (3-2 = 1) e não os 5 Gb.
David Spillett