Was ist ein guter Weg, um die Speichernutzung einer PHP-Seite zu profilieren? Zum Beispiel, um zu sehen, wie viel Speicher meine Daten belegen und / oder welche Funktionsaufrufe den meisten Speicher zuweisen.
xdebug scheint in seiner Profilierungsfunktion keine Speicherinformationen bereitzustellen.
xdebug bietet es in seiner Tracing-Funktion. Dies ist ziemlich nahe an dem, was ich will, außer dass die schiere Datenmenge überwältigend ist, da es Speicher-Deltas für jeden einzelnen Funktionsaufruf anzeigt. Wenn es möglich wäre, Anrufe unterhalb einer bestimmten Tiefe zu verbergen, möglicherweise mit einem GUI-Tool, würde dies mein Problem lösen.
Gibt es noch etwas?
Antworten:
Xdebug hat die Speicherverfolgung in 2.6 (29.01.2018) neu implementiert , die in Qcachegrind oder einem ähnlichen Tool verwendet werden kann. Stellen Sie einfach sicher, dass Sie die Speicheroption auswählen :)
Aus den Dokumenten:
Ich bin mit dem Format der Datei nicht vertraut, aber Qcachegrind hat bei der Suche nach einigen Speicherproblemen hervorragend funktioniert.
quelle
Wie Sie wahrscheinlich wissen, hat Xdebug die Unterstützung für Speicherprofile seit der 2. * -Version eingestellt. Suchen Sie hier nach der Zeichenfolge "Entfernte Funktionen": http://www.xdebug.org/updates.php
Also habe ich ein anderes Tool ausprobiert und es hat bei mir gut funktioniert.
https://github.com/arnaud-lb/php-memory-profiler
Folgendes habe ich auf meinem Ubuntu-Server getan, um es zu aktivieren:
Und dann in meinem Code:
Öffnen Sie schließlich die
callgrind.out
Datei mit KCachegrindVerwendung von Google Gperftools (empfohlen!)
Installieren Sie zunächst die Google Gperftools, indem Sie das neueste Paket hier herunterladen: https://code.google.com/p/gperftools/
Dann wie immer:
Jetzt in Ihrem Code:
Öffnen Sie dann Ihr Terminal und starten Sie:
pprof erstellt in Ihrer vorhandenen Browsersitzung ein neues Fenster mit den folgenden Angaben :
Xhprof + Xhgui (meiner Meinung nach das Beste, um sowohl CPU als auch Speicher zu profilieren)
Mit Xhprof und Xhgui können Sie auch die CPU-Auslastung oder nur die Speichernutzung profilieren, wenn dies momentan Ihr Problem ist. Es ist eine sehr vollständige Lösung, es gibt Ihnen die volle Kontrolle und die Protokolle können sowohl auf Mongo als auch im Dateisystem geschrieben werden.
Für weitere Details siehe meine Antwort hier .
Schwarzes Feuer
Blackfire ist ein PHP-Profiler von SensioLabs, den Symfony2-Jungs https://blackfire.io/
Wenn Sie Ihre virtuelle Maschine mit puphpet einrichten, werden Sie froh sein zu wissen, dass sie unterstützt wird ;-)
quelle
memprof_enable
in meinen PHP-Code zu setzen und ich bekommePHP Fatal error: Uncaught Error: Call to undefined function memprof_enable()
. Ich habe gperftools aus dem aktuellen Quellcode installieren lassen.php -i
auf der CLI oder a ausphpinfo()
, um festzustellen , ob die Erweiterung ordnungsgemäß geladen wurde. Wenn Sie es dort nicht haben, lohnt es sich wahrscheinlich, einen Blick auf Ihre*.ini
Dateien zu werfen .sudo pecl install memprof-1.0.0
.Nun, dies ist möglicherweise nicht genau das, wonach Sie suchen, aber PHP verfügt über einige integrierte Funktionen, die die Speichernutzung ausgeben. Wenn Sie nur sehen möchten, wie viel Speicher ein Funktionsaufruf verwendet, können Sie memory_get_peak_usage () vor und nach einem Aufruf verwenden und die Differenz ermitteln.
Sie verwenden dieselbe Technik für Ihre Daten mit dem sehr ähnlichen memory_get_usage () .
Ziemlich unkomplizierter Ansatz, aber es ist eine schnelle Möglichkeit, einen Code zu überprüfen. Ich bin damit einverstanden, dass xdebug mem deltas manchmal zu ausführlich sein können, um nützlich zu sein. Deshalb benutze ich sie oft nur, um mich auf einen Codeabschnitt zu beschränken und dann die spezifische Speichernutzung für kleine Teile manuell auszugeben.
quelle
http://geek.michaelgrace.org/2012/04/tracing-php-memory-usage-using-xdebug-and-mamp-on-mac/
Ich bin auf einem Mac. Wenn Sie also unter Windows arbeiten, müssen Sie dies testen, aber das funktioniert bei mir.
Ich habe meine Datei tracefile-analyzer.php geändert und den Pfad zur PHP-Binärdatei oben hinzugefügt, damit Sie sie im Terminal als normales Unix-Skript aufrufen können.
Vergessen Sie nicht, diese Datei auf 755 zu ändern.
Sie können leicht ein Ruby Watchr-Skript erstellen, um das Skript jedes Mal automatisch aufzurufen, wenn eine Speicherprofildatei (* .xt) erstellt wird. Auf diese Weise können Sie Ihre Verbesserungen weiter testen und sehen, ohne den Befehl immer wieder ausführen zu müssen.
quelle