Apache MPMs - Trabajador vs Prefork

13

Estoy tratando de averiguar cuál es el mejor MPM de Apache que puedo instalar en mi VPS. Vi algunos puntos de referencia y MPM Worker parece funcionar mejor que el de Prefork, pero por alguna razón todos parecen recomendar Prefork sobre Worker para configuraciones de PHP.

¿Es esto solo porque algunas funciones de PHP no son seguras para subprocesos? Solo me setlocale()viene a la mente, pero usaré la misma configuración regional en cada instancia, así que no creo que eso sea un problema. Mi VPS tiene poca memoria y siento que el MPM trabajador sería una mejor opción para mis necesidades, sin embargo, no estoy seguro.

¿Alguien puede ayudarme a decidir sobre esto? ¡Gracias!


PD: También busqué en nginx y lighttpd. nginx parece increíble, pero estoy tratando de evitar compilar desde la fuente y todavía no entiendo para qué sirve php-fpm. Con respecto a lighttpd, fue increíblemente fácil configurar PHP / FCGI con él, pero escuché que tiene pérdidas de memoria. ¿Sigue siendo cierto?

Alix Axel
fuente
2
El problema es que, aunque ahora se supone que el núcleo de PHP es seguro para subprocesos, cuando se trata de extensiones, todas las apuestas están desactivadas.
mattdm

Respuestas:

12

Debe usar prefork cuando use apache + mod_php. Las preguntas frecuentes describen claramente la razón por la cual:

http://www.php.net/manual/en/faq.installation.php#faq.installation.apache2

¿Por qué no debería usar Apache2 con un MPM enhebrado en un entorno de producción?

PHP es pegamento. Es el pegamento utilizado para crear aplicaciones web geniales al unir docenas de bibliotecas de terceros y hacer que todo aparezca como una entidad coherente a través de una interfaz de lenguaje intuitiva y fácil de aprender. La flexibilidad y el poder de PHP se basan en la estabilidad y robustez de la plataforma subyacente. Necesita un sistema operativo que funcione, un servidor web que funcione y bibliotecas de terceros que funcionen para unirse. Cuando alguno de estos deja de funcionar, PHP necesita formas de identificar los problemas y solucionarlos rápidamente. Cuando hace que el marco subyacente sea más complejo al no tener hilos de ejecución completamente separados, segmentos de memoria completamente separados y una caja de arena sólida para cada solicitud, se introducen más debilidades en el sistema de PHP.

nginx + php-fpm también es una excelente manera de ejecutar aplicaciones php. nginx tiene soporte nativo para FastCGI y php-fpm es una de las mejores formas de ejecutar php en un entorno FastCGI. Consulte la documentación de PHP aquí:

http://www.php.net/manual/en/install.fpm.php

dialt0ne
fuente
Con respecto a los MPM de Apache, creo que lo tengo, prefork es el camino a seguir. Estoy inclinado a una configuración nginx o lighttpd debido al alto consumo de memoria de Apache. Lighttpd y PHP-FCGI funcionan de fábrica cuando se instala con aptitude, sin embargo, no estoy seguro de si la pérdida de memoria de la que todos siguen hablando en 06/07 todavía está presente. También leí que Nginx tiene un menor uso de CPU, pero no puedo hacer que funcione con PHP-CGI y mucho menos con PHP-FPM. ¿Hay una manera fácil de instalar esto en Ubuntu usando el administrador de paquetes? ¿Recomiendas alguna lectura sobre este tema?
Alix Axel
Con multiverse habilitado, pude "apt-get install nginx" en lucid y funciona como un campeón: estoy usando sistemas de producción. Aquí hay un buen ejemplo de punto de partida, howtoforge.com/… pero, como siempre, YMMV.
dialt0ne
Puedo instalar nginx usando apt pero no puedo vincularlo al intérprete PHP. El enlace que proporcionó tiene una nueva fuente que parece proporcionar el php5-fpmpaquete. Voy a probarlo
Alix Axel
Este enlace podría ser mejor howtoforge.com/… Estoy usando el repositorio brianmercer para mis sistemas de producción para php5-fpm.
dialt0ne