Quel est un bon moyen de profiler l'utilisation de la mémoire d'une page PHP? Par exemple, pour voir combien de mémoire mes données utilisent et / ou quels appels de fonction allouent le plus de mémoire.
xdebug ne semble pas fournir d'informations sur la mémoire dans sa fonction de profilage.
xdebug ne fournir dans sa fonction de traçage. C'est assez proche de ce que je veux, sauf que la quantité de données est écrasante, car elle montre des deltas de mémoire pour chaque appel de fonction. S'il était possible de masquer les appels en dessous d'une certaine profondeur, peut-être avec un outil graphique, cela résoudrait mon problème.
Y a-t-il autre chose?
Réponses:
Xdebug a réimplémenté le traçage de la mémoire dans 2.6 (2018-01-29) qui peut être utilisé dans Qcachegrind ou un outil similaire. Assurez-vous simplement de sélectionner l'option de mémoire :)
À partir de la documentation:
Je ne suis pas familier avec le format du fichier, mais c'est Qcachegrind qui a très bien fonctionné pour moi en traçant quelques problèmes de mémoire.
la source
Comme vous le savez probablement, Xdebug a abandonné le support du profilage de la mémoire depuis la version 2. *. Veuillez rechercher la chaîne "fonctions supprimées" ici: http://www.xdebug.org/updates.php
J'ai donc essayé un autre outil et cela a bien fonctionné pour moi.
https://github.com/arnaud-lb/php-memory-profiler
Voici ce que j'ai fait sur mon serveur Ubuntu pour l'activer:
Et puis dans mon code:
Enfin ouvrez le
callgrind.out
fichier avec KCachegrindUtilisation de Google gperftools (recommandé!)
Tout d'abord, installez Google gperftools en téléchargeant le dernier package ici: https://code.google.com/p/gperftools/
Puis comme toujours:
Maintenant dans votre code:
Ouvrez ensuite votre terminal et lancez:
pprof créera une nouvelle fenêtre dans votre session de navigateur existante avec quelque chose comme indiqué ci-dessous:
Xhprof + Xhgui (le meilleur à mon avis pour profiler à la fois le processeur et la mémoire)
Avec Xhprof et Xhgui, vous pouvez également profiler l'utilisation du processeur ou simplement l'utilisation de la mémoire si c'est votre problème pour le moment. C'est une solution très complète, elle vous donne un contrôle total et les journaux peuvent être écrits à la fois sur mongo ou dans le système de fichiers.
Pour plus de détails, voir ma réponse ici .
Blackfire
Blackfire est un profileur PHP de SensioLabs, les gars de Symfony2 https://blackfire.io/
Si vous utilisez puphpet pour configurer votre machine virtuelle, vous serez heureux de savoir qu'elle est prise en charge ;-)
la source
memprof_enable
dans mon code PHP et j'obtiensPHP Fatal error: Uncaught Error: Call to undefined function memprof_enable()
. J'ai fait installer gperftools à partir de leur code source actuel.php -i
sur le cli ou aphpinfo()
pour voir si l'extension est correctement chargée. Si vous ne l'avez pas, il vaut probablement la peine de jeter un œil à vos*.ini
fichiers.sudo pecl install memprof-1.0.0
.Eh bien, ce n'est peut-être pas exactement ce que vous recherchez, mais PHP a quelques fonctions intégrées qui généreront l'utilisation de la mémoire. Si vous vouliez juste voir combien de mémoire un appel de fonction utilise, vous pouvez utiliser memory_get_peak_usage () avant et après un appel, et prendre la différence.
Vous utilisez la même technique autour de vos données en utilisant la très similaire memory_get_usage () .
Approche assez peu sophistiquée, mais c'est un moyen rapide de vérifier un morceau de code. Je suis d'accord que les deltas de mémoire xdebug peuvent parfois être trop verbeux pour être utiles, donc je l'utilise souvent pour réduire à une section de code, puis vider manuellement l'utilisation de la mémoire spécifique pour les petits morceaux.
la source
http://geek.michaelgrace.org/2012/04/tracing-php-memory-usage-using-xdebug-and-mamp-on-mac/
Je suis sur un Mac, donc si vous êtes sous Windows, vous devrez tester cela, mais cela fonctionne pour moi.
J'ai modifié mon fichier tracefile-analyzer.php et ai ajouté le chemin vers le binaire PHP en haut afin que vous puissiez l'appeler dans le terminal comme un script unix normal.
N'oubliez pas de chmod ce fichier en 755.
Vous pouvez facilement créer un script ruby watchr pour appeler automatiquement le script chaque fois qu'il crée un fichier de profil de mémoire (* .xt). De cette façon, vous pouvez continuer à tester et voir vos améliorations sans avoir à exécuter la commande à plusieurs reprises.
la source