MPM Apache - Worker vs Prefork

13

J'essaie de savoir quel est le meilleur MPM Apache que je peux installer sur mon VPS. J'ai vu quelques benchmarks et MPM Worker semble mieux fonctionner que Prefork, mais pour une raison quelconque, tout le monde semble recommander Prefork over Worker pour les configurations PHP.

Est-ce juste parce que certaines fonctions PHP ne sont pas thread-safe? Seulement setlocale()vient à l' esprit, mais je vais utiliser les mêmes paramètres régionaux sur tous les cas , donc je ne pense pas que ce sera un problème. Mon VPS a peu de mémoire et je pense que le MPM du travailleur correspondrait mieux à mes besoins, mais je ne suis pas sûr.

Quelqu'un peut-il m'aider à me décider à ce sujet? Merci!


PS: J'ai également étudié nginx et lighttpd. nginx semble génial mais j'essaie d'éviter la compilation à partir des sources et je ne comprends toujours pas à quoi sert php-fpm. Concernant lighttpd - il était incroyablement facile de configurer PHP / FCGI avec, mais j'ai entendu dire qu'il y avait des fuites de mémoire. Est-ce toujours vrai?

Alix Axel
la source
2
Le problème est que même si le noyau PHP est désormais censé être thread-safe, en ce qui concerne les extensions, tous les paris sont désactivés.
mattdm

Réponses:

12

Vous devez utiliser prefork lorsque vous utilisez apache + mod_php. La FAQ décrit clairement la raison pour laquelle:

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

Pourquoi ne devrais-je pas utiliser Apache2 avec un MPM fileté dans un environnement de production?

PHP est la colle. C'est la colle utilisée pour créer des applications Web intéressantes en collant des dizaines de bibliothèques tierces et en les faisant apparaître comme une entité cohérente grâce à une interface de langue intuitive et facile à apprendre. La flexibilité et la puissance de PHP reposent sur la stabilité et la robustesse de la plate-forme sous-jacente. Il a besoin d'un système d'exploitation fonctionnel, d'un serveur Web fonctionnel et de bibliothèques tierces fonctionnelles pour être collés ensemble. Lorsque l'un de ces éléments cesse de fonctionner, PHP a besoin de moyens pour identifier les problèmes et les résoudre rapidement. Lorsque vous rendez le cadre sous-jacent plus complexe en ne disposant pas de threads d'exécution complètement séparés, de segments de mémoire complètement séparés et d'un bac à sable solide pour chaque demande à jouer, d'autres faiblesses sont introduites dans le système PHP.

nginx + php-fpm est également un excellent moyen d'exécuter des applications php. nginx a un support natif pour FastCGI et php-fpm est l'un des meilleurs moyens d'exécuter php dans un environnement FastCGI. Voir la documentation php ici:

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

dialt0ne
la source
En ce qui concerne les MPM Apache, je pense l'avoir compris, la préfork est la voie à suivre. Je suis enclin à une configuration nginx ou lighttpd en raison de la consommation élevée de mémoire d'Apache. Lighttpd et PHP-FCGI fonctionnent immédiatement lors de l'installation avec aptitude, mais je ne suis pas sûr si la fuite de mémoire dont tout le monde continue de parler en 06/07 est toujours présente. J'ai également lu que Nginx a une utilisation moindre du processeur, mais je ne peux pas le faire fonctionner avec PHP-CGI et encore moins avec PHP-FPM. Existe-t-il un moyen facile de l'installer sur Ubuntu à l'aide du gestionnaire de packages? Recommandez-vous une lecture à ce sujet?
Alix Axel
Avec le multivers activé, j'ai pu "apt-get install nginx" sur lucid et il fonctionne comme un champion - j'utilise sur des systèmes de production. Il y a un bon exemple de point de départ ici, howtoforge.com/… mais comme toujours YMMV.
dialt0ne
Je peux installer nginx en utilisant apt mais je n'arrive pas à le lier à l'interpréteur PHP. Le lien que vous avez fourni a une nouvelle source qui semble fournir le php5-fpmpackage. Je vais l'essayer.
Alix Axel
Ce lien pourrait être mieux howtoforge.com/… J'utilise le repo brianmercer pour mes systèmes de production pour php5-fpm.
dialt0ne