¿Cómo puedo monitorear el uso de recursos para sitios PHP por host virtual en GNU/Linux?

¿Cómo puedo monitorear el uso de recursos para sitios PHP por host virtual en GNU/Linux?

Ejecutar un montón de sitios PHP a través de apache2.4/mod_php en RHEL usando el MPM previo al fork.

Mis hijos de Apache están usando bastante RAM y mucha CPU.

Me gustaría poder atribuir el uso de RAM/CPU por host virtual.

Una idea que tuve fue usar PHP-FPM y crear un grupo de trabajadores por host virtual. Sin embargo, no tengo claro si puedo nombrar o etiquetar los procesos de trabajo para poder agregar estadísticas de uso de recursos de manera significativa.

Siento que los grandes hosts compartidos deben haber enfrentado este problema antes.

¿Algunas ideas?

Respuesta1

Con prefork mod_php no tienes más o menos idea sobre el uso de RAM/CPU de diferentes vhosts. El problema es que todos los procesos de Apache se ejecutan con el mismo usuario y cada proceso sirve a todos los vhosts. Entonces un proceso puede servir a vhostA en un momento y a vhostB en otro.

Para empeorar las cosas, con cada solicitud atendida, para los procesos de Apache con mod_php, el uso de RAM tiende a crecer hasta que el proceso atiende solicitudes MaxRequestPerChild, después de lo cual el proceso se retira y un proceso nuevo, pequeño y eficiente toma su lugar. Por lo tanto, es prácticamente imposible rastrear el uso de recursos con prefork/mod_php.

Lo que puede hacer es utilizar una herramienta que analice access_log, como apachetop, y observe el tipo de solicitudes que atiende apache. Eso no le dará resultados muy detallados, pero al menos verá algún tipo de patrón. Eso puede ayudarle si uno de sus vhosts está atacando todo el servidor.

Por otro lado, si desea una mejor solución, hay dos formas de solucionar este problema. Podrías cambiar prefork por itk. mpm-itk le permite ejecutar cada vhost bajo diferentes UID/GID, lo que a su vez resolverá su problema de métricas de consumo de recursos; simplemente podría monitorear el uso de RAM por UID, por ejemplo.

Otra dirección es PHP-FPM con un grupo separado para cada vhost. Pero eso solo separará el consumo de recursos de PHP, aún no podrás ver lo que hace Apache. Pero, al eliminar mod_php de los procesos de Apache, puede ejecutarlos con mpm-worker (modelo de subprocesos) y el uso de RAM de Apache probablemente sería insignificante en comparación con PHP. Con respecto al etiquetado de procesos, simplemente puede ejecutarlos con un UID diferente.

información relacionada