Accueil > Docs > Optimisation Apache

Optimisation Apache

lundi 14 octobre 2013, par b_b

Article en cours de rédaction...

La machine qui héberge les sites régionaux des Petits Débrouillards commence à ramer. Essayons d’améliorer ça...

Première modification le 9/10/13 à 11h15 dans apache2.conf : KeepAliveTimeout 15 => 5.

Adaptation de la directive MaxClients

La directive MaxClients fixe la limite maximale de requêtes simultanées que le serveur peut prendre en charge.

Source : Configuration d’Apache pour des performances maximales.

Déteminer la mémoire utilisée par Apache

ps -ylC apache2 --sort:rss

La commande affichera quelque chose comme ce qui suit. C’est le contenu de la colonne RSS qui indique la mémoire utilisée par chaque processus Apache en Ko :

S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S     0  2139     1  0  80   0 13080 59318 poll_s ?        00:00:22 apache2
S    33 28632  2139  4  80   0 32044 64139 poll_s ?        00:00:00 apache2
S    33 28578  2139  4  80   0 35232 64446 poll_s ?        00:00:02 apache2
S    33 28583  2139  4  80   0 35776 65036 inet_c ?        00:00:02 apache2
R    33 28575  2139  4  80   0 36784 65309 -      ?        00:00:02 apache2
S    33 28567  2139  8  80   0 37724 65058 poll_s ?        00:00:05 apache2
S    33 28561  2139  6  80   0 38668 65271 poll_s ?        00:00:04 apache2
S    33 28510  2139  5  80   0 40200 65513 inet_c ?        00:00:05 apache2
S    33 27906  2139  5  80   0 44648 66597 poll_s ?        00:00:10 apache2
S    33 28503  2139  5  80   0 44740 66525 poll_s ?        00:00:06 apache2
S    33 27907  2139  5  80   0 44836 66858 poll_s ?        00:00:08 apache2
R    33 27916  2139  5  80   0 45020 66643 -      ?        00:00:09 apache2
S    33 27908  2139  6  80   0 45368 66884 poll_s ?        00:00:10 apache2
S    33 27889  2139  4  80   0 46732 66791 inet_c ?        00:00:08 apache2
S    33 27892  2139  6  80   0 48528 67580 poll_s ?        00:00:11 apache2
S    33 27611  2139  4  80   0 52444 68517 poll_s ?        00:00:17 apache2

On peut donc en déduire que la valeur maximum de mémoire utilisée par un processus Apache est d’environ 50Mo (on utilisera la valeur de 60Mo pour garder une marge).

La commande suivante affichera la mémoire utilisée par l’ensemble des processus Apache en Ko :

ps -ylC apache2 --sort:rss | awk '{SUM += $8} END {print SUM}'

Source : Optimisation Apache2.

Déterminer le nombre de processus Apache en cours d’exécution

La commande suivante affichera le nombre de processus Apache en cours d’exécution :

pgrep apache2 | wc -l

Si vous utilisez Munin pour monitorer la machine, vous pouvez déterminer le nombre moyen de processus Apache en cours à l’aide du graphe Apache processes.

On a donc une moyenne d’environ 14 processus en cours sur la semaine courante.

La machine dispose de 2Go de RAM au total et on souhaite allouer 1Go maximum à Apache. On va donc appliquer la règle suivante pour déterminer le nombre maximum de processus Apache à exécuter :

MaxClients = Mémoire vive totale dédiée au serveur web / Taille maximale des processus enfants.

Dans notre cas cela donne : 1024/60 = 17.

Version courte [1]

ps -ylC apache2 --sort:rss | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}'

Surveiller les processes Apache [2]

watch -n 1 "echo -n 'Apache Processes: ' && ps -C apache2 --no-headers | wc -l && free -m"

Use the -/+ buffers/cache row. The values are in MiB. You can see that at this point in time, about 2.3 GiB is in use and 5.7 GiB is free. If your Apache processes get close to the MaxClients setting and there’s plenty of extra RAM available, adjust the value up in small steps. If for some reason the value in the free column gets small (say less than 500), reduce Apache’s MaxClients value and restart.

Surveiller le trafic Apache avec apachetop [3]

apachetop $(find /var/log/apache2/access*.log -print | sed 's/^/-f '/)

Directives StartServers, MinSpareServers, MaxSpareServers et MaxRequestsPerChild

  • StartServers 30% of MaxClients
  • MinSpareServers 5% of MaxClients
  • MaxSpareServers 10% of MaxClients
  • ServerLimit == MaxClients
  • MaxRequestsPerChild 10000 (as conservative alternative to address possible problem with memory leaky apps)

Source : http://serverfault.com/a/644632


http://www.yann.com/fr/optimiser-la-configuration-dapache-20/05/2011.html

https://assistance.nuxit.com/serveurs/sysadmin/optimiser-apache-et-mysql

http://rudd-o.com/linux-and-free-software/tuning-an-apache-server-in-5-minutes

http://www.linuxjournal.com/magazine/hack-and-linux-troubleshooting-part-i-high-load