Problemas no servidor, com falta de RAM, média de carga muito alta

1

Eu preciso desesperadamente de ajuda para descobrir como solucionar esse problema que estou tendo. Eu executo um servidor web de missão crítica (Debian 7.5, 512MB de RAM, 512MB de swap, Apache, MySQL). Ele roda alguns sites WordPress nele. Hoje achei os sites respondendo bem devagar, e ssh'd para descobrir que a média de carga estava um pouco acima de 10.0, e o uso de RAM estava em 100% e o swap estava perto do limite de 512MB.

Eu não tenho ideia de como descobrir o que está acontecendo. O Apache ou o MySQL não estão ajustados corretamente? Talvez alguém esteja atacando o servidor com sucessos repetidos (como eu saberia?). Eu instalei o htop , mas mesmo se vi que o Apache ou o MySQL estavam consumindo uma tonelada de recursos, como eu descobriria o porquê?

Quaisquer pontos na direção correta seriam apreciados maciçamente. Eu estou perdido aqui e tenho que manter este servidor estável.

Nota: O servidor estava funcionando por 30 dias, então talvez isso fosse algum tipo de vazamento lento. Agora que eu reiniciei, a média de carga está em 0,45 1,10 0,88, a RAM é de 165 / 512MB e a swap é de 68 / 512MB.

ATUALIZAÇÃO: ainda com problemas. Capturei uma captura de tela de htop abaixo.

    
por CaptSaltyJack 18.10.2014 / 19:56

3 respostas

4

Parabéns, você conseguiu usar quase todo o seu espaço de troca.

O primeiro problema óbvio aqui é que você foi muito fundo no swap. Provavelmente, é isso que está causando estragos no sistema (muito tempo gasto no sistema, espera de E / S e interrupções de software).

A primeira coisa a fazer é reduzir o número de processos do Apache em execução. Você não precisa de muitos para um site pequeno, e isso vai te levar a um profundo swap e matar seu desempenho ... o que já aconteceu. Eu recomendo que você comece muito pequeno e aumente quando for necessário. Um exemplo:

StartServers            1
MinSpareServers         1
MaxSpareServers         2
MaxClients              5

Isso limita você a apenas atender a 5 solicitações simultâneas (todo mundo tem que esperar na fila). Se neste ponto você receber avisos do Apache sobre a falta de servidores, e você ainda tiver RAM de sobra, então você pode aumentá-los, mas você acabará indo para um ponto em que seu VPS simplesmente não tem RAM suficiente para Lidar com todo o seu tráfego. Nesse ponto, você deve atualizar o VPS.

    
por 26.10.2014 / 18:44
3

Antes de qualquer coisa, com base na captura de tela que você publicou com htop output, parece que você tem 512MB de RAM em um site que está executando o WordPress? Eu nunca vi o WordPress feliz em servidores com menos de 1 GB de RAM. Talvez se você estiver executando um site de teste ou desenvolvimento, 512MB é adequado, mas para um site de produção você precisa de 1GB de RAM. Essa é a raiz do seu problema. Dito isso, aqui estão algumas ideias para ajudar você a extrair um melhor desempenho da configuração que você tem:

I have no idea how to figure out what's going on. Is Apache or MySQL not tuned properly? Maybe someone is attacking the server with repeated hits (how would I know?). I installed htop but even if I saw that Apache or MySQL was eating up a ton of resources, how would I figure out why?

Primeiro, eu não entraria em pânico com um ataque acontecendo. A realidade é que seu servidor provavelmente está assumindo uma carga alta de tráfego legítimo, mas o próprio servidor não está configurado / ajustado para seu uso. É claro que configurações ruins podem fazer com que você se sente durante o ataque DDoS (Distributed Denial of Service), mas isso pode tornar sua vida miserável quando o tráfego bom / normal aparecer de repente em altos números.

Eu postei uma boa lista de itens que você pode rever para melhorar o seu LAMO empilhar o desempenho em outra pergunta semelhante, e será repassado aqui para sua referência:

  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.

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 18.10.2014 / 21:50
0

Primeiro instale estes plugins: super cache (modo htaccess), wpbase, cache de widgets. O Wordpress é conhecido por ter esses problemas. Se isso não ajudar, pode ser um vazamento de memória em um dos seus temas (especialmente se a exibição móvel estiver ativada).

Poste seus registros de acesso e erro.

É altamente recomendável trabalhar com o nginx em vez do apache.

    
por 18.10.2014 / 21:30