Sobrecarga do Ubuntu Server do Apache 2.2 / MySQL

1

Eu me deparei com um problema e simplesmente não consigo descobrir como resolvê-lo; Eu ter um Ubuntu 12.04 Server regular com o apache 2.2 executando um website. De vez em quando o servidor sobrecarrega e começa a ficar sem resposta, comandos simples levam séculos para serem executados até que o servidor seja reiniciado ou o apache / mysql seja reiniciado. (E o site em si desliga completamente)

Olhando no log de erros, vejo um simples

[error] server reached MaxClients setting, consider raising the MaxClients setting

Seguido por um monte de mysqli sendo incapaz de se conectar

Alguém poderia simplesmente supor que eu precisaria aumentar o MaxClients, mas eu já fiz isso algumas vezes e eu me preocupo se eu sobrecarregarei o servidor definindo-o muito alto, abaixo está como o mpm prefork está atualmente conjunto:

<IfModule mpm_prefork_module>
    StartServers          20
    MinSpareServers       10
    MaxSpareServers      20
    MaxClients          150
    MaxRequestsPerChild 90
</IfModule>

Em um dia normal, temos aproximadamente 1700 Usuários / Visitantes (durante 24 horas).

Detalhes do servidor:

  • Memória: 3 GB
  • CPU: 1 - 3300 MHz
  • SO: Ubuntu 12.04
  • Apache: 2.2 com php 5.3.10 e amp; Mysql 5.5.41

Algumas fotos que eu tenho com olhares, aqui você pode ver o apache engolindo um monte de CPU antes que elas caiam novamente: (Isso é apenas com um cupê de usuários no servidor web (5 a 20))

Como evito que meu servidor falhe / sobrecarregue? (Estou aberto a qualquer solução, mesmo mudando para o nginx ou qualquer outra coisa, se puder lidar melhor com a carga).

Além disso, não estou preocupado com o uso / consumo de memória RAM, já que posso adicionar muito mais RAM, é a CPU que me preocupa.

    
por Epodax 21.04.2015 / 10:01

1 resposta

3

Abaixo está um link para um ótimo artigo que ajudará a determinar as configurações corretas para o mpm_prefork_module.

A idéia é executar um script que mostrará quanto de memória é consumida por cada processo do Apache, usando essas informações para definir as configurações.

link

Script: link

MaxClients e amp; ServerLimit.

unzip ap.sh.zip

sh ap.sh

The output will be something like that:

Apache Memory Usage (MB): 1372.6 Average Proccess Size (MB): 54.9041

Try to execute it several times to compare the numbers; good results will be shown when server is under a heavy load. Now when you know average amount of memory consumed by Apache and total amount of memory of your server, it is possible to calculate value to be used for MaxClients setting.

For example, if in average one your Apache process consumes 50MB RAM and server RAM is 2GB, and you want to leave 512MB for the rest processes, then: MaxClients = (2GB – 512MB)/50MB = 30.72 ~ 30.

ServerLimit is, as I understand, the same thing, but while MaxClient setting can be changed on the go without a need to restart Apache, for new ServerLimit value to take effect Apache restart is required.

MaxClients should always be <= ServerLimit. To make it easy, I set ServerLimit = MaxClients calculated by above formula.

    
por 21.04.2015 / 10:57