Como descobrir o que está causando lentidão no aplicativo neste servidor?

1

Esta não é a típica questão de falha de servidor, mas estou sem ideias e não sei para onde ir. Se houver lugares melhores para perguntar isso, apenas me aponte lá nos comentários. Obrigado.

Situação

Temos este aplicativo da web que usa o Zend Framework , para ser executado em PHP em um servidor da web Apache . Usamos MySQL para armazenamento de dados e memcached para cache de objetos.

O aplicativo tem um uso e um padrão de carga muito exclusivos. É um aplicativo da web móvel em que, a cada hora inteira, um cronjob examina o banco de dados para usuários que têm alguma informação em espera ou ação para fazer e envia essas informações para um servidor de notificação (externo), que envia essas notificações para eles. Depois que os usuários receberem essas notificações, acesse o aplicativo e use-o, principalmente por um tempo muito curto. Uma hora depois, acontece a mesma coisa.

Problema

Nas últimas semanas, o uso do aplicativo realmente começou a crescer. Nos últimos dias, encontramos uma carga muito alta e a duplicação dos tempos de resposta do aplicativo durante e após o envio dessas notificações (basicamente, a cada hora). O servidor não trava ou pára de responder a solicitações, mas fica cada vez mais lento e leva 20 minutos para ser recuperado - até que a mesma coisa comece novamente na hora.

Temos um amplo monitoramento no local (New Relic, collectd), mas não consigo entender o que está errado; Não consigo encontrar a garrafa. É aí que você entra:

Você pode me ajudar a descobrir o que está errado e, talvez, como corrigi-lo?

Informações adicionais

O servidor é um Intel Xeon de 16 núcleos (8 núcleos com hyperthreading, eu acho) e 12GB de RAM rodando Ubuntu 10.04 (Linux 3.2.4-20120307 x86_64). O Apache é 2.2.xe o PHP é a versão 5.3.2-1ubuntu4.11.

Se alguma informação de configuração ajudar a analisar o problema, apenas comente e eu a adicionarei.

Gráficos

info

collectd

New Relic

(desculpe os gráficos são gifs e não o mesmo período de tempo, mas acho que a informação mais importante está lá)

    
por janpio 14.04.2012 / 22:17

2 respostas

2

Olá, infelizmente É difícil encontrar uma solução imediata para o seu problema, especialmente sem um administrador de sistema. Dito isso, você pode pelo menos resolver (no longo prazo) o apache da memória - como parece do relatório da relíquia - com um nginx + apache + php para aumentar consideravelmente a velocidade do seu aplicativo Vejo link ou simplesmente pesquise no google / pergunte ao administrador do seu sistema. Como você usa o framework Zend você também pode considerar o link

do Zend Server

Desculpe se essas ideias parecem um pouco genéricas e não resolvem seu problema imediato, mas, a longo prazo, isso pode fornecer uma boa solução.

Outra sugestão é que, se a sua aplicação tende a escalar no futuro, você pode considerar testar a mesma configuração que você tem no link amazon EC2 Isso lhe daria vários benefícios como:

  1. Escalabilidade: você pode executar uma instância principal e cloná-la em uma segunda instância para ser executada sempre que houver necessidade (por exemplo, algo é lento e você quiser ver se é a mesma na segunda instância) ou melhor com duas instâncias e um balanceamento de carga.
  2. Clonagem: com um servidor tradicional, é bastante complicado clonar tudo e estar pronto e funcionando em minutos. Com o EC2 você tem essa vantagem;
  3. Simplicidade: com a nova interface baseada na Web do EC2, você não precisará do administrador do sistema para iniciar uma nova instância e testá-la com um novo IP (que pode ser atribuído em tempo real).

Isso pode soar como uma sugestão aleatória que não resolve seu problema, mas, por experiência pessoal, às vezes, ter a possibilidade de escalar se torna essencial à medida que sua empresa cresce.

Para assistência imediata no seu caso, apenas um administrador de sistema pode ajudá-lo. Se você quiser contratar um, talvez considere o link , mas, novamente, é necessário selecionar um confiável com um feedback muito bom. Se você quer apenas uma consultoria sem ter o administrador para entrar em seu servidor, tenho certeza que você pode encontrar vários disponíveis a preços muito razoáveis (20/30 $ uma hora) para dar o seu feedback.

    
por 15.04.2012 / 04:18
1

O Serverfault, em geral, não é sua consultoria de TI terceirizada. Estamos preparados para responder a perguntas técnicas que sejam específicas (em que podem ser respondidas), mas também geral (em que a resposta fornecida poderia seja útil para alguém que tenha o mesmo problema no futuro, e possa pesquisar na Internet por seu problema e encontre sua pergunta e as respostas irão ajudá-la). Sua pergunta, infelizmente, falha em ambas as contas.

Eu lhe darei uma certa quantia de crédito para pelo menos fornecer uma parte útil de informações de diagnóstico, o que o coloca no top 1% das pessoas que fazem esse tipo de pergunta. No entanto, isso não muda o fato de que a questão é basicamente "fazer o meu trabalho por mim", o que é bastante rude.

Minha única resposta útil para você é entrar em um consultor. Minha expectativa, dada a sua descrição do problema, é que você acabará exigindo uma nova arquitetura de seu aplicativo, possivelmente envolvendo a divisão de um escravo de leitura de banco de dados e o uso de uma máquina separada para processar suas notificações assíncronas. Eu também verificaria a mudança para uma fila de trabalho em tempo real para que o aplicativo não precisasse vasculhar o banco de dados inteiro ou, no mínimo, configurar alguma indexação no banco de dados e / ou retrabalho consultas para tornar a recuperação dessa informação mais eficiente. Um consultor competente deve ser capaz de analisar sua situação com métricas de desempenho e um exame do código e operação do sistema e fornecer recomendações e assistência para implementá-las. Eu trabalho para uma empresa de hospedagem que fornece todos esses serviços como parte de nosso pacote de suporte, mas apenas para clientes que estão hospedados conosco. Por isso, não estou disponível para esses tipos de compromissos ad-hoc (a menos que você queira mudar hospedagem ...)

    
por 15.04.2012 / 00:08