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

1

Executando um monte de sites PHP via apache2.4 / mod_php no RHEL usando o prefork MPM.

Meus filhos do apache estão usando um pouco de RAM e muita CPU.

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

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

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

Alguma idéia?

    
por astletron 24.11.2014 / 23:27

1 resposta

1

Com o prefork mod_php você está mais ou menos indiferente sobre o uso da RAM / CPU de diferentes vhosts. O problema é que todos os processos apache são executados sob o 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, com 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 se retira e o processo novo, pequeno e enxuto toma o seu lugar. Portanto, é praticamente impossível rastrear o uso de recursos com o prefork / mod_php.

O que você pode fazer é utilizar uma ferramenta que analise o access_log, como o apachetop, e observe o tipo de solicitações que o apache oferece. Isso não lhe dará resultados muito precisos, mas pelo menos você verá algum tipo de padrão. Isso pode ajudá-lo se um de seus vhosts estiver debatendo o servidor inteiro.

Por outro lado, se você quiser uma solução melhor, há algumas maneiras de você poder solucionar esse problema. Você poderia trocar o prefork por itk. O 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 é o PHP-FPM com um pool separado para cada vhost. Mas isso só separará o consumo de recursos do PHP, você ainda não poderá ver o que o apache faz. Mas, com a remoção do mod_php dos processos do apache, você pode executá-los com o mpm-worker (modelo encadeado) e o uso de RAM do apache provavelmente seria insignificante em comparação com o PHP. Em relação à marcação de processos, você pode simplesmente executá-los em diferentes UID.

    
por 25.11.2014 / 01:00