Apache 2.2 mpm_worker: plus de threads ou plus de processus?


17

Lorsque vous utilisez Worker MPM dans Apache, vous pouvez jouer avec le nombre de processus enfants et le nombre de threads de serveur par processus enfant.

Quels sont les avantages et les inconvénients de chacun? Dans quelles circonstances augmenteriez-vous l'un ou l'autre?

Réponses:


25

Jusqu'à présent, ce sont mes principales considérations lors de la détermination des threads par rapport aux processus:

  1. Les threads utilisent beaucoup moins de mémoire résidente que les processus. Oui, avec les bibliothèques liées dynamiquement, beaucoup de mémoire est partagée entre le processus de contrôle Apache et ses processus enfants, mais chaque nouveau processus devra instancier tous les modules que vous avez activés.

    Ceci est facilement testable en comparant l'utilisation de la mémoire de chaque processus où vous avez, par exemple, soit 5 processus et 1 thread chacun, soit 5 processus et 25 threads chacun. Dans mon cas ici, chaque processus enfant prend environ 7 Mo, quelle que soit la quantité de threads.

    + Pour les fils

  2. Il faut plus de temps pour démarrer en termes de temps et de cycles de processeur pour charger un nouveau processus que pour un thread. Cela peut être testé en vérifiant le nombre moyen de pages servies via 'ab'.

    + Pour les fils

  3. Un processus Les threads dépendent tous du processus. La plus grande préoccupation ici est que si quelque chose arrive au processus, cela affectera tous les threads qui lui sont associés. Si vous exécutez avec un seul processus avec un tas de threads, alors lorsque le processus se termine, les threads le seront également. Plus de processus entraîneraient donc une meilleure séparation, et donc une plus grande tolérance aux "pannes" si vous voulez.

    + Pour les processus

  4. En relation avec (3), pour les modules tels que PHP, leur mémoire est chargée par le Processus et partagée entre tous les Threads. Cela signifie que si vous avez php avec memory_limit réglé sur 100Mbs avec 25 Threads ci-dessous, alors à la charge maximale techniquement, chaque Thread serait en mesure d'allouer un maximum de 4Mo chacun (bien sûr, cela ne se produira pas de cette façon, certains monopoliseront, certains le feront mourir de faim).

Donc, en fin de compte, cela dépend vraiment de votre cas d'utilisation. Cela étant dit, vous voudrez maximiser la quantité de threads utilisés afin de réduire l'utilisation de la mémoire et d'augmenter la réactivité. Cependant, vous devrez équilibrer cela avec une quantité appropriée de processus pour une meilleure tolérance aux pannes.

Bien sûr, je ne suis pas un expert ici car je n'ai que récemment dû m'inquiéter à ce sujet, donc j'ai hâte de voir quelles autres réponses pourraient apparaître ici!


1
+1 pour de bonnes informations générales. J'aimerais cependant voir plus de détails / détails concrets si possible.
sh-beta
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.