312 votes

Manière la plus simple de profiler un script PHP

Quel est le moyen le plus simple de profiler un script PHP?

J'adorerais clouer quelque chose sur ce qui me montre un vidage de tous les appels de fonction et combien de temps ils ont pris, mais je suis également OK avec mettre quelque chose autour de fonctions spécifiques.

J'ai essayé d'expérimenter avec la fonction microtime :

 $then = microtime();
myFunc();
$now = microtime();

echo sprintf("Elapsed:  %f", $now-$then);
 

mais cela me donne parfois des résultats négatifs. De plus, il y a beaucoup de problèmes pour l'arroser partout dans mon code.

275voto

mercutio Points 5828

Vous voulez xdebug je pense. Installez-le sur le serveur, allumez-le, pompez la sortie via kcachegrind (pour Linux) ou wincachegrind (pour Windows) et il vous montrera quelques jolis graphiques qui détaillent les horaires, les comptes et l'utilisation de la mémoire (mais vous besoin d'une autre extension pour cela).

Il bascule, sérieusement: D

107voto

Vincent Points 5027

L'extension PECL APD est utilisée comme suit:

 <?php
apd_set_pprof_trace();

//rest of the script
?>
 

Après, analysez le fichier généré en utilisant pprofp .

Exemple de sortie:

 Trace for /home/dan/testapd.php
Total Elapsed Time = 0.00
Total System Time  = 0.00
Total User Time    = 0.00


Real         User        System             secs/    cumm
%Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
--------------------------------------------------------------------------------------
100.0 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0000   0.0009            0 main
56.9 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0005   0.0005            0 apd_set_pprof_trace
28.0 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 preg_replace
14.3 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 str_replace
 

33voto

michalzuber Points 700

Webgrind est idéal pour visualiser le cachegrind pour Xdebug

entrez la description de l'image ici

25voto

luka Points 198

Si la soustraction de microtimes donne des résultats négatifs, essayez d'utiliser la fonction avec l'argument true ( microtime(true) ). Avec true , la fonction renvoie un float au lieu d'une chaîne (comme si elle était appelée sans arguments).

25voto

zeroasterisk Points 801

Honnêtement, je vais affirment que l'utilisation de NewRelic pour le profilage est le meilleur.

C'est une extension PHP qui ne semble pas ralentir l'exécution et faire le suivi pour vous, vous permettant de décent de l'exploration. Dans la version onéreuse ils permettent lourd de forage vers le bas (mais on ne peut pas se permettre de leur modèle de tarification).

Pourtant, même avec la gratuit/plan-norme, c'est évident et simple, où la plupart des fruits mûrs. J'aime aussi qu'il peut vous donner une idée de la DB interactions trop.

screenshot of one of the interfaces when profiling

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X