como entender com o que o Apache está ocupado?

1

Eu tenho o Apache em um servidor Linux e um script Python dentro dele (Trac, para ser mais específico). Com um tráfego mínimo, ele consome 99% da CPU e a média de carga está acima de 3,00. É possível entender de alguma forma o que está fazendo lá - disco, rede, quais arquivos, etc.? Existem algumas ferramentas para analisar com o que um processo específico está ocupado?

Editar: strace apache2 -X me mostrou muitas linhas com conteúdo semelhante:

stat("/home/foo/apache/conf.d/trac-XXX.conf", {st_mode=S_IFREG|0644, st_size=1014, ...}) = 0
open("/home/foo/apache/conf.d/trac-XXX.conf", O_RDONLY|O_CLOEXEC) = 6
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6a93021000
fstat(6, {st_mode=S_IFREG|0644, st_size=1014, ...}) = 0
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6a9301e000
read(6, "contents of my trac-XXX.conf"..., 4096) = 1014
read(6, "", 4096)                       = 0
close(6)               

E as mesmas linhas para todos os arquivos no diretório /home/foo/apache/conf.d/ (eu tenho centenas deles). Você sabe como interpretar essas informações e corrigir o problema? Parece que o Apache está recarregando todos os arquivos de configuração em todas as solicitações HTTP.

    
por yegor256 08.04.2013 / 21:02

1 resposta

3

Você pode usar strace ( man strace ). Como root tente

strace 'ps -e | grep apache2 | awk '{ print "-p"$1 }''

ou similar com trac em vez de apache2 . Você também pode querer configurar LogLevel para debug .

A seguinte edição é um tiro selvagem no escuro, não sendo familiarizado com o Trac.

Nos comentários a seguir bilhete Trac 3833 osimons declara:

If you for instance don't use mod_python, but use a simple CGI setup instead, the Environment gets completely reloaded for each request. Such a request essentially have no history - a Python process is started, modules loaded, Trac processing started, and when request is done the whole Python process dies.

The reason this also works is because request specific information (like your preview example) gets passed around as arguments to the request object - available inside the req context.

Então a questão é: você está usando mod_python ou CGI simples para rodar o Trac? Se você estiver usando CGI simples, fica claro por que os arquivos de configuração do Trac são lidos em cada solicitação.

    
por 08.04.2013 / 23:11