Perfil do tempo de resposta HTTP

5

Eu tenho um proxy reverso nginx. O servidor está próximo de atender de 600 a 700 solicitações por segundo. Eu tenho um plugin de tempo de carregamento Munin HTTP que está produzindo isso:

link

Agora, o problema é que estou vendo alguns picos no gráfico. Os tempos de resposta esperados devem estar sempre abaixo dos 200ms. Estou de olho no syslog e nas mensagens, mas não consigo descobrir a causa real disso. Eu queria saber se existe algum bom sistema de perfis de tempo de resposta HTTP que eu possa instalar / incorporar com este servidor nginx e obter relatórios / logs detalhados sobre a divisão do tempo gasto por coisas diferentes e qual é exatamente a causa dos picos.

O sistema de criação de perfil também me ajudaria a entender os gargalos e como posso otimizar ainda mais a latência.

O mais importante agora é investigar a causa dos picos nos gráficos de tempo de carregamento HTTP (o padrão similar é relatado por monitores externos - Pingdom) e corrigi-lo para obter tempos de resposta consistentes

Obrigado

    
por Sparsh Gupta 28.02.2011 / 07:55

1 resposta

6

Uau! Como você está medindo os tempos de carregamento? Até onde eu sabia, o nginx só informaria os tempos de resposta do pedido ($ request_time), o que é algo completamente diferente.

Eu não tive uma boa olhada por alguns meses, mas da última vez que verifiquei, havia muito pouco disponível para analisar os tempos de resposta. PastMon parece promissor. E existem ferramentas comerciais como o Client Vantage (bastante caro).

Acabei por escrever o meu - não é muito difícil criar um script awk simples para comunicar todos os resultados que ultrapassam um limite - mas lembre-se de que terá de voltar e verificar como o URL se comporta Resto do tempo. por exemplo,

# looking for URLs matching 'example.com/interesting' 
# with URL in $6 and $request_time in $8

BEGIN {}
$6==/example.com\/interesting/ {
  if ( $8>0.3) {
     n[$6]+=1;       # no of hits by URL
     t[$6]+=$8;      # sum of times by url
     s[$6]+=$8 * $8; # sum of sq of times by url
     if (m[$6]<$8) m[$6]=$8; # max time for url
  }
}
END {
   print "url, n, avg, stddev, max";
   for (x in n) {
     print x ", " n[x] ", " t[x]/n[x] ", " sqrt(s[x]-t[x]*t[x])/(n[x]-1) ", " m[x]; 
   }
}

Se você estiver medindo os tempos de resposta no proxy, também estará medindo o tempo gasto para entregar a solicitação pela rede - ou seja, seu aplicativo pode estar se comportando de forma consistente, mas os picos são introduzidos pelas alterações na Internet / cliente . Se você quiser ver o que seu aplicativo realmente está fazendo, é necessário consultar os registros do servidor da Web.

    
por 28.02.2011 / 10:48