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