Sysena

Tag: apache

Optimisation de apache2-mpm-worker sur debian 6 squeeze, pour un reverse proxy

by on mai.16, 2011, under Systeme

La version threadé de apache 2 a la facheuse tendance d’être tres gourmant en environnement linux. Mais ce n’est pas de sa faute ! C’est la faute de linux ;o)
Par défaut, la mémoire alloué à la stack d’un thread est de 8mo (sous debian6), ce qui est beaucoup beaucoup beaucoup trop dans la majorité des cas. En utilisant apache2-mpm-worker, automatiquement vous allez donc consommer beaucoup de mémoire pour rien.

Apache

Voici une configuration basique :

    StartServers          2 => nombre de process au démarrage
    MinSpareThreads      25 => nombre minimum de thread libre
    MaxSpareThreads      75 => nombre maximum de thread libre
    ThreadLimit          64 => limite de thread (au total)
    ThreadsPerChild      25 => nombre de thread par process
    MaxClients          150
    MaxRequestsPerChild   0

Avec une configuration basique, comme celle ci, vous allez consommer 2 x 25 x 8 = 400mo … avec 0 client (startServers x MinSpareThreads x taille de la pile) . En période de pointe, jusqu’à 64 x 8 = 512 mo. Tout ça pour rien !

Pour un apache utilisé en reverse proxy, avec le minimum de module nécessaire (proxy, proxy_ajp, proxy_http, rewrite, deflate etc…) vous n’avez ABSOLU pas besoin d’autant de stack.

Éditez votre script d’init (/etc/init.d/apache2), et ajoutez au début du script :

ulimit -s 512

Cela aura pour effet de brider la stack à 512ko.
Avec la même configuration, votre apache consommera désormais 2 x 25 x 0.5 = 25 mo au démarrage, et seulement 64 x 0.5 = 32 mo en période de pointe.

Il existe la directive threadstacksize qui permet théoriquement de régler la taille de la stack autrement qu’une limitation via ulimit. Malheureusement, comme l’indique la documentation d’apache 2.3, ce flag ne fonctionne que pour fixer une stack supérieur à la taille par défaut du système. (non indiqué dans la doc apache 2.2). Pour fixer une taille inférieur, le seul moyen est d’utiliser ulimit -s.

Note : faites attention quand meme, si vous utilisez votre apache avec beaucoup de module. Vous aurez peut etre besoin d’un tout petit peu plus que 512 ko de stack. A vous d’ajuster ce parametre en fonction de vos besoins. Sachez que mon reverse proxy tourne très bien avec 128ko de stack, pour les quelques modules cités précédement.

 

Leave a Comment :, more...