Profilage et performance de vos scripts PHP

Le profilage d’applications a pour objectif de cibler les fonctions et méthodes de votre code, qui consomment beaucoup de mémoire ou de CPU.

Les outils présentés permettent de générer des données sur l’exécution d’un script. Ces données seront triées et filtrées pour obtenir des indicateurs de performance :

  • La fonction de votre script qui est exécutée le plus longtemps et le plus souvent.
  • La fonction qui a demandé le plus de mémoire

Suite à la phase de profilage suivra la phase d’optimisation du code PHP.

XDebug + KCacheGrind

1) Installer et configurer Xdebug

Télécharger Xdebug. Prendre note que XAMPP, MAMP et WAMP fournissent déjà une installation de Xdebug. Il vous suffit de modifier votre fichier php.ini pour l’activer.

Modifier les paramètres de Xdebug dans votre php.ini

xdebug.default_enable=1
xdebug.scream=1
xdebug.profiler_enable=1
xdebug.profiler_output_dir=/tmp/xdebug

Cette configuration permet d’ajouter le stacktrace des erreurs survenues. L’option scream désactivera l’opérateur de contrôle @ de PHP. De cette manière, toutes les erreurs seront affichées. Pour ce qui est du output_dir, c’est l’endroit où les données de profilage seront enregistrées. Il ne reste plus qu’à exécuter une page de votre serveur Web pour générer le fichier qui pourra ensuite être analysé avec kCacheGrind (sudo apt-get install kcachegrind).

2) Ouvrir le fichier généré par Xdebug dans KCacheGrind

kcachegrindC’est avec KCacheGrind qu’il vous sera possible d’identifier les fonctions qui demandent le plus de temps d’exécution. Ce sont ces fonctions qui devront être optimisées.

Si KCacheGrind sut Linux ne vous convient pas, l’alternative Webgrind vous offre une interface Web. Si vous voulez analyser les données sur Windows, utiliser WinCachegrind.

Autres outils : Cachegrind et Valgrind

2a) Analyser les données de profilage avec le script fourni par Xdebug

php tracefile-analyser.php trace.2043925204.xt memory-own 20
parsing...
Done.
Showing the 20 most costly calls sorted by 'memory-own'.

function         #calls  time     memory  time     memory
---------------------------------------------------------------
require_once          9  0.0541  4595160  0.0277  2548104
{main}                1  0.0600  2906032  0.0034   249744
fread                 4  0.0001    33296  0.0001    33296
session_start         1  0.0002    31824  0.0002    31824

3) Optimiser le code

Une fois que vous avez identifié les endroits où vos problèmes de performance se trouvent, il ne reste qu’à optimiser votre algorithme.

Pour en savoir plus : http://erichogue.ca/2011/03/linux/profiling-a-php-application/

 

XHProf – Profileur développé par Facebook

Catégories : Optimisation, PHP
Développé chez Facebook
https://github.com/facebook/xhprof

XHProf est un outil de profilage (temps d’exécution, quantité de mémoire) de vos scripts PHP. Il offre une interface HTML simple qui vous permettra de naviguer à travers les données. Comparativement à Xdebug, XHProf a été développé pour être exécuté sur un système en production.

Article sur l’installation de XHProf sur un serveur : http://techportal.ibuildings.com/2009/12/01/profiling-with-xhprof/

XHGui

Catégories : Optimisation, PHP
https://www.ohloh.net/p/xhgui
Une interface graphique pour naviguer à travers les données de profilage générées par XHProf.

Rapport de performance avec SIEGE

Siege est une application HTTP multi-thread qui permet de réaliser des tests de charge (stress test) sur une application Web. Il a été développé pour permettre aux développeurs de mesurer la performance de leur code lorsqu’exécuté de façon intensive. Il permet de simuler l’appel d’une page par plusieurs utilisateurs fictifs, pour ainsi mesurer la performance (temps requis, quantité de données transférées, temps de réponse du serveur, …).

tar -xvf siege-latest.tar.gz
cd siege-2.70/
./configure
make
sudo make install
siege.config

require : httperf, jmeter-http

siege -c 4 -r 10 -f /tmp/urls.txt
siege -c 5 -b -t30s http://localhost
** SIEGE 2.70
** Preparing 5 concurrent users for battle.
The server is now under siege...
Lifting the server siege.. done.
Transactions:	         143 hits
Availability:	         100.00 %
Elapsed time:	         29.75 secs
Data transferred:	 0.27 MB
Response time:	         1.02 secs
Transaction rate:	 4.81 trans/sec
Throughput:	         0.01 MB/sec
Concurrency:	         4.92
Successful transactions: 143
Failed transactions:	 0
Longest transaction:	 1.54
Shortest transaction:	 0.94

Référence : http://linuxcommand.org/man_pages/vmstat8.html

 

Optimiser vos requêtes MySQL avec EXPLAIN

Catégories : MySQL, Optimisation, Serveur
http://dev.mysql.com/doc/refman/5.0/en/using-explain.html

EXPLAIN est un outil MySQL qui permet de vérifier les performances d’une requête SQL. L’outil vous aidera à optimiser les requêtes moins performantes. Explain permet de calculer le nombre de champs traités. Son utilisation est simple, il suffit de préfixer le mot EXPLAIN devant votre requête SQL.

Exemple :

EXPLAIN SELECT * FROM t_table

 

PHP APC

Catégorie : PHP, Optimisation
http://php.net/manual/en/book.apc.php

Le « Alternative PHP Cache » (APC) est un cache d’opcode libre et ouvert pour PHP. Son objectif est de fournir un framework libre, ouvert et robuste, pour la mise en cache et l’optimisation de code intermédiaire PHP. Détail de la fonction apc_add

apc_add (PECL apc >= 3.0.13)

Met en cache une variable dans le magasin de données, uniquement si elle ne s’y trouve pas déjà.

Note: Contrairement aux autres mécanismes en PHP, les variables stockées en utilisant la fonction apc_add( ) seront persistantes entre les requêtes (jusqu’à ce que la valeur soit effacée du cache).

<?php
$bar = 'BAR';
apc_add('foo', $bar);
var_dump(apc_fetch('foo'));
echo "\n";

0 réponses

Répondre

Want to join the discussion?
Feel free to contribute!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *