Como depurar porque meu servidor tem atraso 3s em cada requisição nginx / unicorn?

3

Estou tentando depurar por que meu servidor demora 3 segundos em cada solicitação.

Estessãomeusarquivosdeconfiguraçãonginxeunicorn: link

Minha informação do servidor:

  Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-37-generic x86_64)

  System load:  0.02              Processes:           71
  Usage of /:   38.9% of 6.89GB   Users logged in:     0
  Memory usage: 28%               IP address for eth0: 149.156.119.151
  Swap usage:   0%

server:~$ cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 6
model           : 2
model name      : QEMU Virtual CPU version 1.0
stepping        : 3
microcode       : 0x1000065
cpu MHz         : 2300.026
cache size      : 512 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 4
wp              : yes
flags           : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx lm up nopl pni cx16 popcnt hypervisor lahf_lm svm abm sse4a
bogomips        : 4600.05
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

Esta é a saída de tcpdump -qtln port 80 - > link

    
por tomekfranek 14.02.2013 / 13:19

1 resposta

3

Para depurar isso, isolaria sistematicamente cada componente para encontrar o gargalo. Em todos os momentos eu iria tail -f quaisquer arquivos de log, incluindo o acesso nginx / logs de erro e os logs de trilhos para erros.

A primeira questão é, é lenta apenas na produção ou também no modo de desenvolvimento? A resposta ajudará você a diagnosticar, concentrando-se no que é diferente entre os ambientes.

Inicie o processo de unicórnio no modo independente e conecte-se à porta 8080, eliminando o nginx. Ainda é lento? Se sim, é um problema de trilhos ou unicórnio. Duvido que o nginx seja o problema, porque os recursos estáticos estão sendo servidos relativamente rápido em seu site.

Teste o aplicativo em Webrick para eliminar o Unicorn. Se ainda for lento, comece a investigar seu aplicativo de trilhos.

Eu testei seu site com telnet ck.uci.agh.edu.pl 80 fazendo um GET http://ck.uci.agh.edu.pl/ e o atraso estava lá antes de qualquer texto ser impresso. Isso elimina qualquer problema de carregamento de javascript ou de recursos no navegador.

Coisas para experimentar:

  • Teste componentes isolados do seu aplicativo em rails console fazendo pesquisas de modelo. Percorra cada componente da exibição da sua página principal, uma de cada vez, até encontrar o atraso. Tente executar o código que você executa na ação index do controlador e qualquer coisa que a sua página executa enquanto é analisada. Você está procurando por problemas de banco de dados, atrasos de conexões para serviços externos, etc.

  • Use um período de avaliação do serviço New Relic no modo Pro, que pode revelar afunilamentos de aplicativos, como consultas de banco de dados lentas ou chamadas para serviços externos. Mostra tudo o que é executado e quanto tempo demora.

  • Faça uma pesquisa de DNS na linha de comando do seu servidor, como nslookup somehost.com . Às vezes, um servidor DNS atolado pode desacelerar seu aplicativo se ele usar nomes de host em qualquer comunicação com outros servidores, como seu servidor de banco de dados, serviços de geolocalização, etc.

  • A única coisa que eu vi na sua configuração foi que você deve definir seu worker_processes para pelo menos o unicórnio. número de CPUs no seu servidor. Tente aumentar esse número para 4 e veja se isso ajuda, mas observe o uso da memória.

Espero que isso ajude. Boa sorte!

    
por 14.02.2013 / 15:42