Tengo una situación en la que ocurre lo siguiente:
Estamos en linode con 8 núcleos, 8 gb de ram, 2.6 ghz, usando nginx + php-fpm, estamos obteniendo gráficos extremadamente altos de uso de CPU (que no queremos ser un vecino VPS tan malo) ...
Tenemos alrededor de menos de 100 usuarios en el sitio a la vez, por lo que esta situación también es increíblemente vergonzosa, porque nuestro uso de CPU es muy alto.
Estamos utilizando un Framework muy desconocido, posiblemente intensivo en CPU, php-wise, cuestionablemente horrible en lugar de otros frameworks bien conocidos, bien documentados y bien diseñados como WordPress o Drupal en los que hay MUCHA documentación sobre el almacenamiento en caché (así como complementos que manejan el almacenamiento en caché) php en una plataforma nginx + php_fpm.
Por lo tanto, tenemos alrededor de 6 procesos php-fpm abiertos que, al EJECUTARSE, consumen individualmente GRANDES (más de 30%, y a menudo cerca del 99%) cantidades de CPU, y realmente no tengo la menor idea de cómo evitar que usen tanta CPU . No puedo decir qué scripts php están causando estos picos porque están sucediendo todo el tiempo ... por lo general, solo 1 o 2 se están ejecutando, pero cuando los 6 se ejecutan, maximizamos los 8 cpus.
Mi archivo pool.d / www.conf tiene la siguiente configuración:
pm = dynamic pm.max_children = 10 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 6
Hicimos esta configuración ^ porque, en la forma en que lo estoy interpretando, nuestra memoria es realmente increíble (htop muestra 472/7000 + mb utilizados, sin intercambio, etc.) y podríamos manejar muchos más procesos y romper la línea esperando obtener procesado, PERO desafortunadamente, dado que cada proceso es demasiado intenso en nuestra CPU cuando se ejecuta, terminamos manejando nuestra CPU por el techo, por lo que no podemos manejar suficientes procesos.
La pregunta : ¿qué podemos hacer para reducir el uso de la CPU del proceso php-fpm para que podamos aumentar la configuración en ese archivo de configuración de grupo para php-fpm ? Y también sí, el /var/log/php5-fpm.log nos está gritando que aumentemos nuestros hijos y ajustemos / aumentemos nuestros servidores min / max / start. Pero hacerlo hace que nuestro promedio de carga sea una locura como se dijo anteriormente. ¿Cómo podemos hacerlo sin usar necesariamente un caché o cuáles son nuestras opciones?
¿Mi idea? He leído cosas sobre el uso de cpulimit para garantizar que ningún proceso requiera más que una cantidad asignada de CPU, pero ¿eso retrasará las cosas para que no se puedan usar? O al hacerlo, podríamos aumentar nuestra capacidad para ejecutar más de unos pocos procesos; también pensé en ejecutar dos grupos: uno para nuestro sitio web orientado hacia adelante (lo que experimentan los clientes) y otro para un back-end (que está afectando nuestro sitio orientado hacia adelante cuando el tiempo -informes de consumo se están ejecutando).
He pasado unos días investigando, buscando en Google, etc. sobre este tema, y es difícil porque la situación de cada persona es tan única en su sistema, que el problema está en un marco tan específico, inaudito y posiblemente mal escrito. Es difícil encontrar una solución. Tampoco podemos descartar este marco todavía: tengo que encontrar una solución de algún tipo.
ACTUALIZACIÓN: he implementado memcache para almacenar sesiones php, porque el marco depende en gran medida de las sesiones de los usuarios y la naturaleza de nuestro sistema es que los empleados a menudo usan varias pestañas a la vez, cada una de las cuales vuelve a las sesiones para confirmar las habilidades / datos de usuario / etc. ... así que espero ver un aumento en el rendimiento de esto, bienvenido a comentar sobre eso si lo desea, veré cómo va mañana cuando superemos nuestras horas pico de mayor volumen.