Lorsque que l’on développe un projet sous PHP/Mysql/Apache, une fois celui-ci en production il nous arrive souvent de chercher à maximiser les performances de l’application pour exploiter au maximum les capacités de la (ou les) machine qui héberge le projet. L’optimisation se situe à deux niveaux, optimisation des algorithmes (qui est celle qui apporte le plus de performances infine) et l’optimisation des configurations sur la machine.

Grâce à Google je vais vous partager une petite astuce permettant de gagner 15 à 20% de performances supplémentaires sur Mysql (vérifié), ainsi que pour PHP et Apache (par extension je n’ai pas vérifié avec des benchmarks). En bref, de quoi augmenter de façon significative les temps de réponse de vos pages…

Sachant qu’aujourd’hui Google considère les temps de réponse de vos pages dans son indexation, il est donc important de chercher à les améliorer et donc d’effectuer quelques optimisations de code et de configuration. On utilisera pour se faire la librairie tcmalloc venant des Google Perftools. Cette librairie optimise l’utilisation de malloc() en C/C++ au niveau de la gestion de la mémoire dans un environnement multi-thread.

MAJ: DotDeb nous fourni aujourd’hui tout ce qu’il faut dans leurs dépôts c’est donc désormais bien plus simple pour maintenir cette librairie, procédez donc comme ceci :

Ajoutez (si cela n’est pas déjà fait) les lignes suivantes au fichier sources.list de APT:

nano /etc/apt/sources.list
deb http://packages.dotdeb.org oldstable all
deb-src http://packages.dotdeb.org oldstable all

Remplacez « oldstable » par « stable » si vous utilisez la dernière version de Debian (Squeeze), oldstable n’est valable que pour Debian Lenny.

Ensuite mettez à jour vos listes :

 apt-get update

Si vous avez une erreur du type :

GPG error: http://packages.dotdeb.org oldstable Release: 
The following signatures couldn't be verified because the public key is not available

Exécutez les lignes de commandes suivantes :

gpg --keyserver keys.gnupg.net --recv-key 89DF5277
gpg -a --export 89DF5277 | apt-key add -

Puis installé le paquet désiré :

apt-get install libtcmalloc-minimal0

Maintenant il va falloir modifier les bash de lancement de Mysql et d’Apache comme ceci :

nano /etc/init.d/mysql

Juste après :

 export HOME=/etc/mysql/

Ajoutez :

export LD_PRELOAD="/usr/lib/libtcmalloc_minimal.so.0"<span class="Apple-style-span" style="font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19px; white-space: normal;"> </span>

Il vous reste désormais à les relancer :

/etc/init.d/mysql stop
/etc/init.d/mysql start

Question performance j’ai bien noté le gain assez perceptible sous Mysql. Pour Apache je viens de l’intégrer dans l’espoir que PHP, étant en module de celui-ci, en tire parti. Je n’ai pas fait de benchmark donc si vous pouvez tester de votre coté et signaler l’utilité ou non de le mettre sur Apache, n’hésitez pas ;-) .

MAJ: N’aillant pas constaté de différence notable il est préférable de ne pas l’ajouter sur Apache, j’ai donc supprimé la partie « Apache » de ce tutoriel.