MAJ: Optimiser les performances Mysql/Apache/PHP
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.
| Imprimer l'article | Cette entrée a été posté par Steuf le 23 juin 2010 à 14 h 36 min, et placée dans Développement Web, Mysql, Optimisation. Vous pouvez suivre les réponses à cette entrée via RSS 2.0. Vous pouvez laisser une réponse, ou bien un trackback depuis votre site. |


about 2 years ago
je découvre ce blog qui va pouvoir rejoindre ma liste de flux sur netvibes, bravo.
Sinon, quelques mois après, un retour sur cette optimisation ?
Ca ne dégrade pas la stabilité du serveur ?
C’est la première fois que j’en entends parler en tout cas. Peu etre parce que c’est plus de l’ordre de l’admin sys que du développement.
about 2 years ago
J’ai restructuré mes serveurs il n’y a pas longtemps, mais globalement sur Mysql je n’ai jamais eu aucun problème de stabilité, ça tient la route. Oui c’est plus de l’ordre de l’admin système et comme j’en fait un peu (à mon niveau) c’est toujours intéressant d’avoir des petite astuces de ce genre
Sur Apache je l’ai enlevé je n’ai pas noté de différence signifiante car de toute façon c’est PHP qui prend le plus de temps pour pouvoir délivrer le contenu, de ce fait la différence (s’il y en avait une) n’était pas significative du point de vue utilisateur.