Apache – config optimisée – étape par étape

Je suis tombé sur un excellent article en anglais, mais tout le monde ne maitrisant pas l’anglais j’ai entrepris de le traduire pour vous.

Il explique comment choisir les valeurs les plus critiques dans apache (MaxClients, Keepalive, Timeout, MaxKeepAliveRequests, MinSpareServers, MaxSpareServers, StartServers, MaxRequestsPerChild) en suivant une procédure plutôt bien expliquée.

Je propose une version step-by-step (pour débuter) suivie d’une sorte de raisonnement mathématique (pour juste avoir les calculs).

Step by step version

  • Lancer top
  • Prendre dans la colonne RES la plus grande valeur utilisée par apache2
  • Quitter top (appuyer sur q)
  • Couper apache : service apache2 stop
  • Vérifier qu’apache est bien arrêté : ps -C apache2 devrait ne rien renvoyer
  • Noter la mémoire utilisée (commande free -m lire sous la colonne used la ligne mem)
  • Trouver la mémoire que votre machine ou VPS vous propose/garanti.
  • Soustraire la mémoire utilisée de cette valeur garantie cela vous donnera une valeur que l’on notera FREE MEMORY POOL
  • Multiplier cette dernière valeur par 0.8 de façon à avoir une valeur que l’on nommera  AVAILABLE APACHE POOL (nous laissons 20% pour les périodes de burst)
  • Diviser cette dernière valeur par la valeur RES récoltée au point 2. Ceci vous donne la valeur MaxClients de votre apache2.conf

Ne pas oublier que chaque valeur spécifiée dans le fichier de config doit être entière et non décimale. Une valeur inférieure vous fera peut être un serveur un tout petit peu plus lent mais avec nettement moins de risque qu’il parte dans les choux à long terme. Pensez y…

  • Ouvrer votre apache2.conf et changer la valeur MaxClients.
  • Mettre KeepAlive à Off (le serveur traitera plus de requêtes/seconde avec cette valeur à on mais ce dernier prendra plus de mémoire -si vous n’avez pas laissé 20% de marge  dans l’AVAILABLE APACHE POOL alors ne mettez pas la valeur à On–)
  • Si vous avez mis KeepAlive à on settez la valeur la plus basse possible pour KeepAliveTimeout. Si vous rencontrez des problèmes de latence avec votre serveur augmentez la valeur vers 2-5 secondes
  • Un bon TimeOut devrait être de 10-30 si vos clients sont en xDSL/Cable, 30-120 devrait être ok pour les liaisons “d’antan”
  • MaxKeepAliveRequests devrait être égal au nombre max d’objets que vous avez dans une page, si vous n’en n’avez pas la moindre idée une valeur entre 70-200 devrait suffir.
  • MinSpareServers est égal à 10-25% de MaxClients
  • MaxSpareServers est égal à 25-50% de MaxClients
  • StartServers doit être égal soit à la valeur de MinSpareServers ou MaxSpareServers : quand apache est (re)démarré, c’est le nombre de serveurs qui sont automatiquement lancés en même temps. Si vous avez un site à petit trafic, il vaut mieux le faire correspondre à la valeur Min, sinon à la valeur Max.
  • MaxRequestsPerChild à mettre entre 500 (si vous voyez des augmentations rapides de consommation mémoire dans les enfants) et 10000 (Si vous n’avez pas la moindre fuite mémoire dans vos apps). Une valeur de 0 signifierait que les process enfants ne sont jamais killés ce qui pourrait résulter en une grande consommation mémoire inutile.
  • Sauvegarder le fichier et relancer apache : service apache2 restart

Pseudo-code version

 ligne mem, colonne used;
$memoireGarantie = free -m > ligne mem, colonne total (or specs server);
$FREE_MEMORY_POOL = memoireGarantie - memoireUtilisee;
$AVAILABLE_APACHE_POOL = $FREE_MEMORY_POOL * BURST_RESERVE;
MaxClients = $AVAILABLE_APACHE_POOL / consoMaxProcess;

if (lowest memory || BURST_RESERVE > 0.8){
	KeepAlive Off;
}else{
	KeepAlive On;
	KeepAliveTimeout 1;
	if (high latency with server){
		KeepAliveTimeout 2-5;
	}
}
if (client xDsl/Cable)
	Timeout = 10-30;
else //dialup link
	Timeout = 30-120;

MinSpareServers = 10-25% MaxClients;
MaxSpareServers = 25-50% MaxClients;
if (High-traffic site)
	StartServers = MaxSpareServers;
else
	StartServers = MinSpareServers;

MaxRequestsPerChild = 0; //child processes never being killed, higher overall memory use -> dangerous

if (rapid apache child process memory use growth)
	MaxRequestsPerChild = 500;
if (no leaks in your applications)
	MaxRequestsPerChild = 10000;
//Quelque part entre ses deux valeurs selon la "qualité" de votre code
?>

Source (en anglais) : https://www.virtacoresupport.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=102

One Response to “Apache – config optimisée – étape par étape”

  1. Geeko says:

    Merci pour cette traduction, j’ai pu constater que j’avais carrément over paramétré mon serveur.