Como detectar se o Apache está (à beira de) estar sobrecarregado por pedidos?

2

Estou mantendo e planejando uma instância do servidor EC2 executando o Apache2 no Ubuntu, que recebe atualmente até cerca de 10.000 solicitações (muito simples) por hora. São apenas alguns dados que chegam pelo POST e um hífen de texto simples falso é respondido.

A quantidade de solicitações aumentará gradualmente com o tempo até cerca de um milhão por hora.

Como posso (confiavelmente >) detectar que o servidor está de joelhos e não é mais capaz de lidar com as solicitações recebidas?

O que eu estou fazendo no momento é simplesmente verificar a carga da memória e da CPU em htop - e se elas não estiverem na fronteira com a capacidade total, então presumo que esteja tudo bem.

    
por Raffael 08.07.2016 / 11:25

3 respostas

2

Acho que você está certo de ver os recursos do sistema. Carga média, carga IO, memória, troca, CPU, etc ...

Você provavelmente se beneficiará de alguns detalhes sobre o status interno do Apache, como o que os processos estão realmente fazendo.

link

Um exemplo do que o mod_status pode mostrar de www.apache.org

link

Isso pode ajudar a coletar informações ao longo do tempo para analisar mais tarde como um todo

link

Dependendo da sua configuração, você precisará assistir de forma independente ao desempenho dos serviços de back-end que o Apache está usando, como servidores de banco de dados, etc.

    
por 08.07.2016 / 16:59
2

Com relação à quantificação do desempenho do apache para os usuários finais, o tempo necessário para atender uma resposta é útil e aumentará com a carga no servidor. Eu normalmente combino o registro desse valor com algum software de análise da web, como awstats ou webalizer.

Infelizmente, o formato de log padrão não mostra isso e, portanto, eu uso um formato de log personalizado no meu apache. Esse é um exemplo;

# Define logfile format used for response time analysis
LogFormat "\"%{%Y-%m-%d %H:%M:%S}t\" %V %m \"%U\" \"%q\" %{Content-Type}o %s %B %O %D" responsetime
CustomLog "/var/log/apache2/responsetime.log" responsetime

Diretiva de formato de log personalizado% D fornece o tempo de solicitação;

%D The time taken to serve the request, in microseconds.

Documentação do Apache: link

Exemplo daqui; link

    
por 09.07.2016 / 22:38
1

Disclaimer: I work at www.mosoplot.com, which automates most of the capacity planning needed here. I've used some charts from MOSOplot to demonstrate how to do this.

É assim que faço planejamento de capacidade para servidores da Web.

A primeira consideração é que o uso do Htop / top não é adequado para este tipo de análise. Eles só mostram a visão de curto prazo mais extrema, o que é ótimo para análise de desempenho, mas fede a planejamento de capacidade. Você realmente precisa examinar um período de tempo mais longo para julgar isso com precisão. É como provar algumas pessoas para determinar a composição religiosa de um país. Como você sabe que o curto período que você estava assistindo era representativo do que está acontecendo com o servidor no resto do tempo? E quando você está dormindo? Você sabe mesmo se é o horário de pico ou não?

O Htop também usa apenas um intervalo de 2 segundos por padrão. Então picos vêm e vão, e eles podem ou não ser importantes. Realmente, o intervalo mínimo para planejamento de capacidade seria de 5 minutos, mas eu prefiro 1 hora. Isso suavizará os picos para mostrar a tendência subjacente. Isso é o que você precisa planejar contra. No entanto, se você tiver motivos para acreditar que há tendências de curto prazo (por exemplo, se todas as transferências ocorrerem por 10 minutos no início de cada hora), então, por todos os meios, observe isso.

Etapa 1: colete os dados e armazene-os.

O MOSOplot usa o agente collectd, que é capaz de coletar métricas do apache, bem como métricas do sistema.

Para obter as estatísticas do apache (tempo de resposta e volumes), você pode usar o plug-in collectd tail, que será lido nos arquivos de log do apache e extrairá os dados de que você precisa. Existe um plugin apache dedicado, mas ele não recebe os tempos de resposta.

Algo como isso deve ser um começo, junto com as alterações de configuração descritas por Tom H para incluir% D.

LoadPlugin tail
<Plugin "tail">
 <File "/var/log/apache2/access.log"> <-- PUT IN CORRECT FILENAME
  Instance "apache"
  <Match>
   Regex "GET.*?\s([0-9\.]+)\s[0-9\.]+$"
   ExcludeRegex "\s/(favicon|wp-)"
   DSType "GaugeAverage"
   Type "response_time"
   Instance "last_byte"
  </Match>
 </File>
</Plugin>

Etapa 2: observe as principais métricas de recursos

  • Tempo de resposta
  • número de transações
  • Utilização da CPU
  • Utilização de memória

A métrica número um a ser observada é o tempo de resposta - a menos que seu aplicativo seja um sistema em lote e, nesse caso, você pode ignorar isso.

Tente correlacionar a utilização da CPU e da memória com o tempo de resposta. Isso lhe dará uma idéia de quando seu sistema irá quebrar. O tempo de resposta pode chegar a 5x normal, mas depois disso pode se deteriorar rapidamente. Algumas aplicações podem até não lidar com isso, por isso depende.

Aqui está um link para um gráfico que mostra um exemplo de comparação da CPU com os hits do servidor da Web / minuto. Neste caso, os volumes são baixos e parece que podemos chegar confortavelmente a 15 acertos / minuto. cpu v hits / minuto

Etapa 3: quando atualizar

Se você não conseguiu coletar tempos de resposta, precisará usar limites fixos. Definitivamente, NÃO espere até que a CPU e / ou a memória estejam limitando a capacidade total. Para começar, provavelmente começaria a degradar em torno de 60% (média horária). Em segundo lugar, a Amazon usa o modo burst em alguns de seus sistemas na marca de 60%, o que é uma boa indicação de que eles consideram esse um bom limite. Se você está freqüentemente excedendo o nível de burst, então você deve pensar em atualizar.

A memória deve estar OK em torno de 90%, mas dado que o apache pode às vezes ter problemas OOM (nginx é melhor nisso), então eu ficaria mais feliz com 70% de pico de uso.

O Apache tende a ser bastante volátil com o uso da memória. Em um servidor da Web que monitoramos, acabamos mudando para o nginx porque era uma instância pequena com apenas 1GB de RAM, e o apache estava sofrendo erros de OOM. Aqui está um gráfico mostrando o quanto o uso de RAM estava pulando sob o apache comparado ao nginx. Variável de memória com o apache v nginx

Outra coisa para pensar aqui é a rapidez com que você pode obter aprovação para atualizar. Embora, na verdade, a atualização na AWS possa ser rápida, supondo que seu aplicativo seja escalonável, obter a aprovação para atualizar na maioria dos clientes com quem trabalho é, bem, glacial! Dê a si mesmo algumas semanas / meses de vantagem, se é isso que você precisa.

    
por 14.07.2016 / 14:28