Quanta memória livre devo ter no meu servidor web? [duplicado]

4

Eu tenho um servidor que hospeda atualmente dois sites Wordpress e alguns softwares de colaboração baseados em java. O servidor tem 2G de memória e atualmente usa cerca de 1,8G da memória disponível. No momento, o que está aqui é praticamente um projeto piloto que está recebendo um tráfego insignificante, então acho que está bem claro que precisarei de mais memória.

Eu estava pensando, se eu fosse lançá-lo, como eu poderia antecipar minhas necessidades de memória com base no tráfego que recebe. Eu procurei no Google e o que eu achei foi um pouco tênue. Existe uma boa heurística que se deve usar ao calcular as demandas de memória como uma função da carga básica (sem tráfego) no servidor?

Para referência, a saída de free -m pode ser vista abaixo:

             total       used       free     shared    buffers     cached
Mem:          2048       1832        215          0          0          0
-/+ buffers/cache:       1832        215
Swap:            0          0          0

Para mim, isso parece com a memória real usada e não é uma ilusão devido ao armazenamento em cache ou qualquer outra coisa.

Eu acho que as demandas do meu software de colaboração terão que ser testadas experimentalmente, então aqui está free -m sem que o software seja executado:

             total       used       free     shared    buffers     cached                                     
Mem:          2048       1109        938          0          0          0                                     
-/+ buffers/cache:       1109        938                                                                      
Swap:            0          0          0   

Meu plano B para descobrir isso é adicionar um monte de espaço de swap ao servidor, dar a ele algum tráfego e ajustar de acordo com a quantidade que o swap é usado. Eu estava imaginando se alguém tinha uma boa regra para estimar quanta memória eu deveria planejar com antecedência ... ou se o que estou pensando é maluco.

Muito obrigado antecipadamente (sou muito novo nisso).

    
por neanderslob 08.11.2013 / 21:08

1 resposta

14

A resposta é basicamente: depende. No seu caso específico, a qualidade & a eficiência dos sites que você instalou pode entrar em questão.

Por exemplo, esta semana eu estava trabalhando em um servidor que é relativamente moderado, mas consumindo 4 GB de RAM. Depois de fazer uma revisão de código - todo o site está usando um CMS de prateleira semelhante ao WordPress, mas com personalizações - descobrimos um grande gargalo. Depois de recodificarmos o problema, o servidor agora usa cerca de 2 GB de RAM em um dia normal. Uma queda de 50% no uso de RAM!

Eu não recomendaria fazer algo como dividir o servidor para usar o Ngnix e o Apache. Apenas use o Apache. As dores de cabeça de equilibrar as configurações de dois servidores diferentes não valem o benefício marginal. O Apache está bem. Mas dito isso, você deve considerar seus sites PHP WordPress contra o aplicativo Java versus MySQL na mesma caixa. Na minha experiência, você deve fazer o seguinte:

  1. Configure corretamente o Apache: O Apache é um bom software, mas, assim que sai da caixa, ele é um invasor de memória. Por exemplo, acredito que o padrão é permitir 255 conexões por segundo? Posso garantir a você que sites mais simples mal conseguem 40 conexões por segundo em um bom dia. Então, ajustar o Apache para ser realista para o seu tráfego ajudará. Além disso, há uma configuração KeepAlive no Apache que funciona muito bem! Mas fora da caixa, acredito que esteja definido como MaxKeepAliveRequests de 100, o que é bastante maluco. Eu costumo definir isso para cerca de 30 conexões com um pequeno KeepAliveTimeout de 2 a 3 segundos. A chave é ter o KeepAliveTimeout para corresponder à velocidade que leva para uma página média baixar com um pouco de espaço para sobrecarga / lentidão. Portanto, se uma página for carregada em 1 segundo, faça um KeepAliveTimeout de 2 segundos.
  2. Revise o código dos seus sites do WordPress quanto a possíveis afunilamentos: Concentre-se no núcleo do PHP dele & esclarecer o que você pode. Cuidado com as chamadas excessivas do MySQL & chamadas do sistema de arquivos. É aqui que você poderá fazer o aplicativo voar! Além disso, verifique o memory_limit no seu php.ini e certifique-se de que ele não seja maior que o necessário. O padrão é 64M, mas em muitos casos pode ser reduzido para 32M.
  3. Ajuste do MySQL ou movendo-o para seu próprio servidor: Depois de escrever sobre o MySQL acima, percebi que você pode estar hospedando sua instância do MySQL na mesma caixa. Procure otimizar o desempenho do MySQL executando um script como primer de ajuste do MySQL . Sem ajustes, o MySQL consumirá todos os recursos & grande o sistema para baixo. Com o ajuste, o MySQL será executado melhor / mais rápido & recursos podem ser liberados para outros propósitos. Além disso, considere mover seu banco de dados MySQL para um servidor autônomo. Talvez você tenha que aprender a usar a rede corretamente & Firewall o servidor para permitir o acesso de seus servidores, mas proteger contra hackers, mas o benefício de desempenho será ótimo.
  4. Considere mover o aplicativo Java para outro servidor: Minha regra geral é um aplicativo Java principal por servidor. Em geral, os aplicativos Java podem ser invasores de memória quando comparados a configurações do PHP, como o WordPress. Ao dar ao aplicativo Java o próprio servidor a ser usado, os sites do WordPress ficarão muito mais felizes.

Em relação ao ajuste do MySQL, isso pode levar algumas semanas para ser definido no começo. A razão pela qual os scripts de ajuste são baseados no tráfego real que o MySQL vê. Então você basicamente faz seu site viver para o mundo, aguarde dois dias (pelo menos), execute os scripts de ajuste & depois espere mais alguns dias para sintonizar mais alguns. Após uma semana ou mais, você poderá ajustar o MySQL para funcionar tão bem quanto possível com a sua configuração.

    
por 08.11.2013 / 21:51