Tuning Dotclear2 et Apache
Suite aux petits problèmes de performance rencontrés ces derniers jours sur mon blog (à cause de mon article sur le virus MSN en autre .. merci aux 3000 visiteurs journalier de cet article), j'ai réussi à optimiser la consommation CPU de mon serveur Web en modifiant plusieurs paramètres sur Dotclear 2 et Apache :
Voici la liste des optimisations que j'ai mises en place, je n'ai pas de chiffres exactent qui permettent de quantifier le gain de performance obtenu par ces modifications, cependant le rendu utilisateur est plus appréciable qu'avant et la consommation CPU du serveur n’excède plus les 50%. :
Patch de Dotclear2 pour le support des connexions MySQL persistantes
Après avoir modifié le code de Dotclear2 pour utiliser des connexions persistantes, j'ai obtenu un gain de CPU notable sur le processus MySQL. Les connexions MySQL de Dotclear2 restent désormais ouvertes et sont réutilisées à chaque accès au blog.
Pour plus d'infos sur la modification à réaliser dans les sources de Dotclear 2, vous pouvez vous référer à l'article que j'ai posté sur ce sujet.
Suppression des plugins PostViewCount & Visite
En supervisant les threads actifs de la base MySQL (via l'outil MySQL Administrator), je me suis rendu compte qu'il y avait un goulot d'étranglement au niveau des plugins "Visites" et "PostViewCount". Chaque demande de page provoquait un UPDATE sur une ligne en base de données.
Les UPDATE ne pouvant se faire en parallèle, plusieurs threads étaient en attente que la ressource se libère pour mettre à jour leur donnée en base.
Enfin les UPDATE sont coûteux en CPU et en IO, les éviter est une bonne chose ...
Deux optimisations sont possibles :
- Remplacer les UPDATE par des REPLACE dans le cas de MySQL. Le REPLACE est plus performant que le UPDATE.
- Utiliser un cache mémoire (ex: eaccelerator_get & eaccelerator_push) pour stocker les données de visite et de flusher ce cache toutes les 10 minutes par exemple pour éviter les nombreux UPDATE en base.
Dans mon cas, j'ai supprimé les deux plugins de mon installation Dotclear 2..
Modification de la configuration Apache
J'ai supprimé l'option "AllowOveride All" contenu dans la configuration Apache qui force Apache à vérifier la présence de fichiers ".htaccess" dans le répertoire qui contient les pages Web (DotcumentRoot) à chaque requête HTTP.
Maintenant, quand une requête HTTP est réalisée, plus aucun fichier ".htaccess" n'est recherché par le serveur Web.
Toutes les informations qui étaient contenues dans le fichier ".htaccess" ont été copiée dans le fichier httpd.conf.
Remplacement du serveur Apache par Lighttpd
Lighttpd est un serveur ultra léger est très rapide, il consomme beaucoup moins de RAM qu'Apache. Il est souvent utilisé en serveur Web frontal pour servir les données statiques directement aux clients et pour rediriger les données dynamiques vers un serveur Apache situé sur un autre port de la machine. Cela permet ainsi d'éviter d'utiliser des gros threads Apache/Php pour délivrer du contenu statique et donc de faire de l'économie de RAM et avoir des temps de chargement de page plus rapides.
J'ai fait deux trois tests, et j'ai finalement laissé tombé l'idée d'utiliser Lighttpd sur mon serveur, car cela pose trop de problèmes vis à vis des sites existants. Il y trop de modifications à réaliser ....
Pour plus d'informations sur les optimisations Apache, Je vous conseille la lecture ce cet excellent article.