qual pid usar para strace meu apache

1

Meu apache2 está sendo executado lentamente. Um único arquivo PHP leva muito tempo para ser processado. O servidor está ativo. Eu não quero reiniciá-lo. Então, pensei em anexar strace a ele e verificar o que está acontecendo.

Então eu corro

strace -p 'cat /var/run/apache2.pid '

Depois disso, carrego alguns URLs de teste. Carregue então muitas vezes. Mas não vi nenhuma saída no console strace !

Depois lembro que há muitos processos filhos. Então eu verifiquei eles

$ ps ax | grep apache[2] -i
 1877 ?        Ss     0:02 /usr/sbin/apache2 -k start
 2006 ?        S      0:00 /usr/sbin/apache2 -k start
 2007 ?        S      0:00 /usr/sbin/apache2 -k start
 2008 ?        S      0:00 /usr/sbin/apache2 -k start
 2009 ?        S      0:00 /usr/sbin/apache2 -k start
 2010 ?        S      0:00 /usr/sbin/apache2 -k start
 9985 ?        S      0:00 /usr/sbin/apache2 -k start
 9988 ?        S      0:00 /usr/sbin/apache2 -k start
 9997 ?        S      0:00 /usr/sbin/apache2 -k start
 9998 ?        S      0:00 /usr/sbin/apache2 -k start
 9999 ?        S      0:00 /usr/sbin/apache2 -k start

Agora, minha pergunta é: como eu ligo todos esses processos filhos? Como sei qual processo filho está lidando com a solicitação agora?

    
por Shiplu Mokaddim 21.02.2012 / 22:11

1 resposta

1

A resposta curta: você não pode prever qual processo do apache lidará com uma solicitação.

A maneira mais simples de resolver este problema é dedicar um xterm a cada processo do apache e executar strace -p <pid> para cada apache pid.

Quando estou nessa situação, geralmente faço isso no meu httpd.conf (em uma caixa de desenvolvimento):

<IfModule prefork.c>
StartServers       1  <--------
MinSpareServers    1  <--------
#StartServers       8
#MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

Isso reduz o número de processos que preciso monitorar ... obviamente, não é uma boa solução para um ambiente de produção.

FYI, se você precisar strace de um processo que será bifurcado depois de iniciar stracing (por exemplo, um processo wsgi ), poderá usar strace -fp <pid_of_future_forker> e strace as crianças bifurcadas automagicamente.

    
por 28.08.2012 / 22:17