18 votes

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

Lorsque vous utilisez le MPM Worker 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 ?

25voto

jonathanserafini Points 1728

Jusqu'à présent, voici les principales considérations que j'ai prises en compte lors du choix entre Threads et Processes :

  1. Les threads utiliseront beaucoup moins de mémoire résidente que les processus. Oui, avec les bibliothèques liées dynamiquement, une grande partie de la 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.

    Cela peut être facilement testé en comparant l'utilisation de la mémoire de chaque processus lorsque vous avez, par exemple, soit 5 processus et 1 thread chacun, soit 5 processus et 25 threads chacun. Dans mon cas, chaque processus enfant occupe environ 7 Mo, quel que soit le nombre de threads.

    +For Threads

  2. Le chargement d'un nouveau processus est plus long, en termes de temps et de cycles du processeur, que celui d'un thread. Ceci peut être testé en vérifiant la quantité moyenne de pages servies via 'ab'.

    +For Threads

  3. Les threads d'un processus dépendent tous du processus Le plus gros problème ici, c'est que si quelque chose arrive au processus, cela affectera tous les threads qui lui sont associés. Si vous utilisez un seul processus avec un tas de threads, lorsque le processus meurt, les threads aussi. Un plus grand nombre de processus entraînerait donc une meilleure séparation, et donc une plus grande tolérance aux "fautes", 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 fixé à 100Mbs avec 25 Threads en dessous, alors à la charge maximale, techniquement chaque Thread sera capable d'allouer un maximum de 4MBs chacun ( bien sûr, cela ne se passera pas comme ça, certains vont accaparer, d'autres vont mourir de faim ).

En fin de compte, cela dépend vraiment de votre cas d'utilisation Ceci étant dit, vous voudrez maximiser la quantité de Threads utilisés afin de diminuer 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 en la matière, car ce n'est que récemment que j'ai eu à m'en préoccuper. J'attends donc avec impatience de voir quelles autres réponses pourraient surgir ici !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X