Optimisation d'Apache Prefork - Choisir la bonne valeur `MaxRequestsPerChild`

9

J'essaie d'optimiser nos serveurs Web pour gérer autant de connexions que possible. J'ai lu de nombreux articles et les notes Apache. J'essaie de comprendre quelle valeur dois-je choisir MaxRequestsPerChild.

Au début, j'ai essayé de le définir sur 4 000, mais le serveur a eu du mal à gérer de nombreuses demandes, j'ai donc commencé à le faire. En ce moment, mon réglage est:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  40000
</IfModule>

Après avoir défini la valeur MaxRequestsPerChild40 000, le serveur a réussi à gérer plus de connexions sans utiliser plus de mémoire / cpu.

Quelqu'un peut-il me dire s'il vous plaît si cette valeur est trop élevée ou si c'est correct d'avoir une valeur aussi élevée?

Merci!

Informations sur le système d'exploitation:

[root@web06 ~]# uname -a
Linux web 2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux
[root@web06 ~]# free
             total       used       free     shared    buffers     cached
Mem:       3814660    3502968     311692          0     144368    2970468
-/+ buffers/cache:     388132    3426528
Swap:      5210104          0    5210104
Kuf
la source

Réponses:

10

MaxRequestsPerChildn'est vraiment utile que pour limiter la quantité de fuite de mémoire au fil du temps lors de l'exécution de scripts dynamiques. Si vous ne proposez que du contenu statique ou des scripts très petits / simples, vous pouvez probablement le mettre à 0 ou très haut sans beaucoup d'effet. Si vous exécutez des scripts plus volumineux / complexes, la définition de 0 / high entraînera une augmentation de la mémoire de vos processus Apache. La quantité exacte dépend de votre application spécifique.

D'un autre côté, le définir très bas peut en fait entraîner une utilisation légèrement plus importante du processeur car les processus Apache sont constamment redémarrés.

Je ferais un test simple pour voir combien de mémoire vos processus peuvent utiliser. Définissez MaxRequestsPerChildsur 0 et redémarrez Apache. Testez chargez quelques pages et voyez quelle est la taille initiale des processus Apache top. Vérifiez à nouveau après quelques heures / jours / semaines (en fonction de votre application et des pages vues) et voyez comment elle évolue. Si elle n'augmente pas beaucoup, un 0 ou une très grande valeur pour MaxRequestsPerChilddevrait convenir.

Si vous avez une taille maximale définie pour vos processus Apache (c'est-à-dire que vous voulez qu'ils soient de 50 Mo ou moins), vous pouvez faire le même test avec différentes valeurs de MaxRequestsPerChildjusqu'à ce que vous trouviez une valeur qui conserve Apache moins que cela.

uesp
la source
1
Comment puis-je tester le chargement des pages et voir la taille des processus Apache à l'aide de Windows Server?
Ahmad Alfy