Como rastrear o processo Apache de alta CPU para um host virtual específico

Como rastrear o processo Apache de alta CPU para um host virtual específico

Olhando para a saída, toppercebo que de forma intermitente há um ou dois processos do Apache consumindo uma grande quantidade de CPU - algo entre 50% - 90%

Os picos no uso da CPU vêm e vão rapidamente a cada 10 segundos ou mais.

Existem vários outros processos do Apache em execução que consomem algo entre 2% - 4%

Eu pesquisei todas as várias maneiras de tentar rastrear qual host virtual/site é responsável por esses processos. No entanto, como eles vêm e vão rapidamente, não consigo encontrar uma maneira confiável de fazer isso.

Eu tentei lsofe também observei a saída, server-statusmas como os processos não duram muito, o ID do processo é reutilizado e não é possível vinculá-lo ao host virtual que está causando o problema.

Por exemplo, se eu executar lsofo ID do processo em questão, ele listará uma dúzia de arquivos de log de host virtual diferentes que compartilharam esse ID do processo nos últimos segundos. Estou convencido de que há um host virtual culpado, mas não consigo descobrir qual deles.

Também verifiquei o log de consultas lentas do MySQL e isso não revela nada de interesse.

Responder1

Minha recomendação: adicione tempo de resposta aos seus logs.

Não é perfeito, pois não há garantia de que as solicitações causadoras de picos demorem mais para serem atendidas do que outras, mas é provável e fornece um ponto de partida para investigação.

Para fazer isso, você desejará definir um novo LogFormat e CustomLog que inclua o parâmetro %D. Veja o Apachedocumentação mod_log_config.

Outra opção que provavelmente é de nível um pouco baixo, mas poderia lhe dar uma idéia da natureza da carga, seria rastrear o processo pai do Apache com -f para seguir os filhos e -c para mostrar o tempo de CPU por chamada , por exemplostrace -f -c -p <apache parent pid>

Depois de saber quais chamadas do sistema estão demorando mais, você poderá rastreá-las diretamente. Por exemplo, digamos que o servidor esteja gastando muito tempo fazendo write(), você poderia então fazer strace -f -e trace=write -p <apache parent pid>e observar essas chamadas com mais detalhes.

informação relacionada