Limiter l'utilisation de la mémoire d'Apache 2

9

J'utilise un serveur Web amateur sur un ancien G3 / 300 bleu et blanc exécutant Debian PPC Squeeze 2.6.30. Les performances sont correctes pendant un certain temps après un redémarrage, mais elles finissent par s'enliser de plus en plus. À l'heure actuelle, la disponibilité est de 76 jours, et le principal coupable semble être l'utilisation de la mémoire de plus de 10 processus apache2.

Je pense que je dois diminuer les valeurs StartServers, MinSpareServerset / ou MaxSpareServers, mais je ne suis pas sûr que l' on à régler, et il y a trois sections pour chaque fonction sur lequel module mpm est utilisé.

Comment puis-je savoir laquelle des sections suivantes je dois modifier et quelles sont les valeurs raisonnables étant donné que la boîte dispose de 448 Mo de mémoire physique (historique de mise à niveau étrange d'un 64, 128 et 256 sticks chacun)?

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

Il n'y a aucune autre instance de StartServers dans mon apache2.conf, mais aucun de ces modules mpm n'apparaît dans mods-availableou mods-enabled. Des idées?

Merci!

UltraNurd
la source
Je suis parti de l'hypothèse que votre boîte manque de mémoire (et vos performances médiocres proviennent d'un échange lourd). Si vous n'échangez pas, je vais vous
embêter

Réponses:

6

400 Mo n'est pas beaucoup pour un serveur Web de nos jours - vous voudrez peut-être envisager de remplacer la boîte :)

Cela dit, si votre utilisation de la mémoire monte en flèche, vous avez probablement une fuite de mémoire quelque part - pour un test rapide, regardez la taille des processus httpd maintenant, puis arrêtez / démarrez Apache et voyez s'ils sont beaucoup plus petits. S'ils les regardent pendant quelques jours et voient s'ils grandissent.

S'il s'agit d'une fuite de mémoire, la vraie solution est de trouver et de réparer la fuite de mémoire, mais comme c'est généralement une douleur dans le cul, vous pouvez également vous ajuster MaxRequestsPerChildà autre chose que 0 (illimité). Cela tuera les travailleurs Apache lorsqu'ils auront traité un nombre fixe de demandes (les forçant à abandonner leur mémoire perdue dans le processus.

Commencez avec des valeurs plus grandes (par milliers ou plus) et descendez par centaines. Si vous obtenez moins de 100 requêtes par enfant, votre fuite de mémoire est suffisamment importante pour justifier sa correction, car les performances de la suppression constante et de la réapparition des travailleurs apache seront importantes.


Re: quel mpm pour ajuster, la réponse est presque certainement prefork.
Vous pouvez courir httpd -Vet chercher la Server MPM:ligne qui vous le dira à coup sûr.

voretaq7
la source
1
-V m'a donné les informations de préfork dont j'avais besoin (bien que ce soit apache2 -V dans mon cas). Merci!
UltraNurd
Il semble avoir fait l'affaire. Je pense que le problème était que je manquais de mémoire physique et que j'échangeais parce que trop de serveurs enfants étaient en place (chacun accaparant environ 80 Mo). Et oui, je sais, le serveur est vieux. Mais il gère à peine toutes les demandes: oD.
UltraNurd
1
Si vous ne traitez pas beaucoup de demandes, vous pouvez également réduire le nombre de serveurs Start & Spare comme vous l'avez mentionné dans votre article d'origine (sur les systèmes de développement, je les ai tous définis entre 2 et 5 pour réduire l'utilisation de la RAM)
voretaq7
J'ai fini par laisser tomber les pièces de rechange min et max à 3 et 6 de 5 et 10, et cela semble laisser suffisamment de RAM pour empêcher les choses de s'échanger. Merci!
UltraNurd
1

Pour limiter l'utilisation de la mémoire du processus Apache, vous souhaiterez ajuster les MaxClients.

La règle générale est la suivante: (Mémoire maximale souhaitée) / (Utilisation de la mémoire pour 1 processus Apache) = # clients max.

En fin de compte, vous devez également ajuster votre pour être MaxSpareServers <= Max Clients .

L'utilisation de la mémoire d'un processus dépend fortement des modules que vous avez chargés (php et ainsi de suite), vous pouvez donc vouloir régler les clients Max un peu plus bas.


la source