Como posso monitorar o uso de recursos para sites PHP por host virtual no GNU/Linux?

Como posso monitorar o uso de recursos para sites PHP por host virtual no GNU/Linux?

Executando vários sites PHP via apache2.4/mod_php no RHEL usando o MPM prefork.

Meus filhos do Apache estão usando bastante RAM e muita CPU.

Eu gostaria de poder atribuir o uso de RAM/CPU por host virtual.

Uma ideia que tive foi usar PHP-FPM e criar um pool de trabalhadores por host virtual. No entanto, não está claro para mim se posso nomear ou marcar os processos de trabalho para poder agregar estatísticas de uso de recursos de maneira significativa.

Sinto que grandes hosts compartilhados já devem ter enfrentado esse problema antes.

Alguma ideia?

Responder1

Com o prefork mod_php você não tem mais ou menos noção sobre o uso de RAM/CPU de diferentes vhosts. O problema é que todos os processos do Apache são executados no mesmo usuário e cada processo atende a todos os vhosts. Portanto, um processo pode servir vhostA em um momento e vhostB em outro.

Para piorar a situação, a cada solicitação atendida, para processos Apache com mod_php, o uso de RAM tende a crescer até que o processo atenda às solicitações MaxRequestPerChild, após o qual o processo é retirado e um processo novo, pequeno e enxuto toma seu lugar. Portanto, é virtualmente impossível rastrear o uso de recursos com prefork/mod_php.

O que você pode fazer é utilizar uma ferramenta que analisa o access_log, como o apachetop, e observar o tipo de solicitações que o apache atende. Isso não lhe dará resultados muito granulados, mas você pelo menos verá algum tipo de padrão. Isso pode ajudá-lo se um de seus vhosts estiver destruindo todo o servidor.

Por outro lado, se você deseja uma solução melhor, existem algumas maneiras de solucionar esse problema. Você poderia trocar o pré-garfo por itk. mpm-itk permite que você execute cada vhost sob diferentes UID/GID - o que, por sua vez, resolverá seu problema de métricas de consumo de recursos - você pode simplesmente monitorar o uso de RAM por UID, por exemplo.

Outra direção é PHP-FPM com pool separado para cada vhost. Mas isso apenas separará o consumo de recursos do PHP, você ainda não conseguirá ver o que o apache faz. Mas, com a remoção do mod_php dos processos do Apache, você pode executá-los com mpm-worker (modelo encadeado) e o uso de RAM do Apache provavelmente seria insignificante em comparação com o PHP. Com relação à marcação de processos - você pode simplesmente executá-los com um UID diferente.

informação relacionada