PHP le profilage de la mémoire
Ce qui est une bonne façon de profil une page PHP de l'utilisation de la mémoire? Par exemple, pour voir combien de mémoire de mes données, et/ou les appels de fonction sont d'allouer plus de mémoire.
-
xdebug n'a pas l'air de fournir des informations sur la mémoire dans sa fonction de profilage.
-
xdebug ne de les fournir dans sa fonction de suivi. C'est assez proche de ce que je veux, à l'exception de la quantité de données est immense, car il présente à la mémoire des deltas pour chaque appel de fonction. S'il était possible de cacher des appels en dessous d'une certaine profondeur, avec peut-être certains outil GUI, qui permettrait de résoudre mon problème.
Est-il autre chose?
- Découvrez Rasmus Lerdorf du discours appelé "Simple est Dur" (talks.php.net/show/froscon08 pour les diapositives, youtube.com/watch?v=RWRYX5eJbG0 pour la vidéo). Il va au-dessus de beaucoup d'outils utiles comme "compris" (pecl.php.net/package/inclued), xdebug, et KCacheGrind.
- J'ai trouvé un patch pour xdebug, qui fournit des informations sur la mémoire dans les profils. Jusqu'à présent, il fonctionne très bien.
- Comme vous le dites, xdebug fournit des informations en fonction des traces. Heureusement, ils fournissent également un script à l'interpréter. derickrethans.nl/xdebug-and-tracing-memory-usage.html Il semble fonctionner pour moi jusqu'à présent...
- double possible de des Outils pour effectuer une analyse visuelle de l'utilisation de la mémoire de PHP app
Vous devez vous connecter pour publier un commentaire.
Xdebug réimplémentée le suivi de la mémoire de la 2.6 (2018-01-29) qui peut être utilisé dans Qcachegrind ou d'un outil similaire. Juste assurez-vous de sélectionner l'option de mémoire 🙂
De la documentation:
Je ne suis pas familier avec le format du fichier, mais c'est Qcachegrind a beaucoup travaillé pour moi dans la recherche de quelques problèmes de mémoire.
Comme vous le savez probablement, Xdebug abandonné le profilage de la mémoire depuis le 2.* version. S'il vous plaît recherche de la "suppression des fonctions de" chaîne ici: http://www.xdebug.org/updates.php
J'ai donc essayé un autre outil et il a bien fonctionné pour moi.
https://github.com/arnaud-lb/php-memory-profiler
C'est ce que j'ai fait sur mon serveur Ubuntu pour l'activer:
Et ensuite dans mon code:
Enfin d'ouvrir les
callgrind.out
fichier avec KCachegrindÀ l'aide de Google gperftools (recommandé!)
Tout d'abord installer le Google gperftools par téléchargement de la dernière version de package ici: https://code.google.com/p/gperftools/
Puis, comme toujours:
Maintenant dans votre code:
Ensuite, ouvrez votre terminal et de lancer:
pprof va créer une nouvelle fenêtre dans votre navigateur session avec quelque chose comme illustré ci-dessous:
Xhprof + Xhgui (le meilleur à mon avis, de profil à la fois le cpu et mémoire)
Avec Xhprof et Xhgui vous pouvez le profil de l'utilisation du processeur ainsi ou tout simplement l'utilisation de la mémoire si c'est votre question pour le moment.
C'est un très complète de solutions, il vous donne le plein contrôle et les journaux peuvent être écrit à 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 PHP profiler par SensioLabs, la Symfony2 gars https://blackfire.io/
Si vous utilisez puphpet pour configurer votre machine virtuelle, vous serez heureux de savoir que c'est pris en charge 😉
memprof_enable
dans mon code PHP et j'aiPHP Fatal error: Uncaught Error: Call to undefined function memprof_enable()
. Je n'ai gperftools faire installer à partir du code source de courant d'entre eux.php -i
sur l'interface cli ou unphpinfo()
pour voir si vous êtes l'obtention de l'extension chargé correctement. Si vous ne l'avez pas, là, c'est probablement la peine de prendre un coup d'oeil à votre*.ini
fichiers.sudo pecl install memprof-1.0.0
.Bien, cela peut ne pas être exactement ce que vous cherchez, mais PHP ne sont un couple de fonctions intégrées qui permettront de sortie utilisation de la mémoire. Si vous voulais juste voir combien de mémoire d'un appel de fonction est à l'aide, vous pouvez utiliser memory_get_peak_usage() avant et après l'appel, et de prendre la différence.
Vous utilisez la même technique autour de vos données à l'aide de très similaire la fonction memory_get_usage().
Assez simples, mais il est un moyen rapide de vérifier un morceau de code. Je suis d'accord que xdebug mem deltas peut-être trop détaillé pour être utile parfois, j'ai donc souvent simplement l'utiliser pour affiner à une section de code, puis vidage spécifiques, l'utilisation de la mémoire pour les petits morceaux manuellement.
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 sur Windows, vous aurez pour tester cela, mais cela fonctionne pour moi.
J'ai modifié mon tracefile-analyzer.php fichier et ajout du chemin d'accès à l'exécutable PHP en haut de sorte que vous pouvez l'appeler dans le terminal normal de script unix.
N'oubliez pas de faire un chmod ce fichier à 755.
Vous pouvez facilement créer un rubis watchr script pour appeler automatiquement le script à chaque fois qu'il crée un profil de la mémoire de fichiers (*.xt). De cette façon, vous pouvez conserver le tester et de voir vos progrès sans avoir à exécuter la commande.