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?
11
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.
dd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
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.
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.
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:
Qual é a melhor maneira de ajustar minha memória para meu aplicativo
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
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.
fonte
Do documento "Servidor Oracle 10g no Red Hat® Enterprise Linux® 5 Recomendações de implantação".
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.fonte
As recomendações atuais do CentOS Swap usam a fórmula:
Portanto, para 16G, a quantidade de swap deve ser 18G.
Consulte http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-swapspace.html
fonte
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)
fonte
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
fonte