Strace poll, tentando diagnosticar gargalo

5

Eu não tenho nenhuma habilidade strace e knowlegde, mas estou tentando trabalhar com um problema em que o aplicativo do meu cliente é terrivelmente lento. E estou tentando descobrir onde o gargalo / problema pode estar.

Então corri

/etc/init.d/apache2 stop && strace -Tf -o /tmp/trace.txt /etc/init.d/apache2 start

E passando por /tmp/trace.txt, estou vendo muitos dos seguintes.

2540  poll([{fd=21, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) <0.000052>

Alguém poderia por favor o que estou vendo e, e como eu iria sobre amarrá-lo onde está o problema. O site usa o MySQL, isso significa que a conexão com o MySQL não pôde ser estabelecida? A pesquisa é parecida com DB?

    
por Brent 18.01.2011 / 15:18

1 resposta

4

Dê um passo para trás primeiro - você está ficando muito baixo antes de descobrir onde está o problema. Uma maneira simples de fazer isso é verificar se as páginas HTTP estáticas estão lentas no Apache - se elas não estiverem, talvez o banco de dados esteja lento. O próximo passo que eu tomaria é ver por quanto tempo as consultas do banco de dados estão sendo realizadas.

Além disso, se tudo isso estiver no mesmo sistema, você poderá ver os recursos do sistema com as ferramentas top , iotop e iostat .

Em relação à chamada do sistema poll :

Eu tentaria adicionar a opção -c ao strace do Apache para ver quais são os seus timings em cada syscall se você reduzi-lo ao apache antes de focar em uma chamada do sistema. Por exemplo, o topo da minha saída de um HAProxy saudável é:

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 38.79    0.001152           0      6089           epoll_wait

A chamada do sistema poll é usada para aguardar para um evento disponível em um descritor de arquivo. Meu primeiro palpite desde o tempo limite é tão baixo que esse é o funcionamento normal do Apache. Pode ser que o Apache esteja ficando sem descritores de arquivos, já que um descritor de arquivo é necessário para cada soquete de rede se isso realmente for um problema. Você pode consultar a seção do manual do Apache sobre os descritores de arquivo se você chegar a este ponto. Mas, de acordo com DerkK, "estaria falhando em open () ou socket ()", o que faz muito mais sentido.

Então, isso é apenas alguns detalhes sobre o que provavelmente não é o seu problema real - novamente, dê vários passos para trás.

    
por 18.01.2011 / 15:25

Tags