Jaki jest dobry sposób na profilowanie wykorzystania pamięci przez stronę PHP? Na przykład, aby zobaczyć, ile pamięci używają moje dane i / lub które wywołania funkcji zajmują najwięcej pamięci.
Wydaje się, że xdebug nie udostępnia informacji o pamięci w swojej funkcji profilowania.
xdebug ma dostarczyć go w funkcję śledzenia. Jest to bardzo zbliżone do tego, czego chcę, z wyjątkiem tego, że sama ilość danych jest przytłaczająca, ponieważ pokazuje delty pamięci dla każdego wywołania funkcji. Gdyby można było ukryć połączenia poniżej pewnej głębokości, może za pomocą jakiegoś narzędzia GUI, rozwiązałoby to mój problem.
Czy jest coś jeszcze?
Odpowiedzi:
Xdebug ponownie zaimplementował śledzenie pamięci w 2.6 (2018-01-29), które może być używane w Qcachegrind lub podobnym narzędziu. Tylko pamiętaj, aby wybrać opcję pamięci :)
Z dokumentów:
Nie znam formatu pliku, ale to Qcachegrind sprawdził się świetnie przy śledzeniu kilku problemów z pamięcią.
źródło
Jak zapewne wiesz, Xdebug porzucił obsługę profilowania pamięci od wersji 2. *. Wyszukaj ciąg „usunięte funkcje” tutaj: http://www.xdebug.org/updates.php
Więc wypróbowałem inne narzędzie i działało dobrze.
https://github.com/arnaud-lb/php-memory-profiler
Oto, co zrobiłem na moim serwerze Ubuntu, aby to włączyć:
sudo apt-get install libjudy-dev libjudydebian1 sudo pecl install memprof echo "extension=memprof.so" > /etc/php5/mods-available/memprof.ini sudo php5enmod memprof service apache2 restart
A potem w moim kodzie:
<?php memprof_enable(); // do your stuff memprof_dump_callgrind(fopen("/tmp/callgrind.out", "w"));
Na koniec otwórz
callgrind.out
plik za pomocą KCachegrindKorzystanie z Google gperftools (zalecane!)
Przede wszystkim zainstaluj gperftools Google , pobierając najnowszy pakiet tutaj: https://code.google.com/p/gperftools/
Wtedy jak zawsze:
Teraz w twoim kodzie:
memprof_enable(); // do your magic memprof_dump_pprof(fopen("/tmp/profile.heap", "w"));
Następnie otwórz terminal i uruchom:
pprof utworzy nowe okno w istniejącej sesji przeglądarki, jak pokazano poniżej:
Xhprof + Xhgui (moim zdaniem najlepiej profilować zarówno procesor jak i pamięć)
Dzięki Xhprof i Xhgui możesz również profilować użycie procesora lub tylko użycie pamięci, jeśli jest to obecnie Twój problem. To bardzo kompletne rozwiązanie, daje pełną kontrolę, a logi można zapisywać zarówno w mongo, jak iw systemie plików.
Aby uzyskać więcej informacji, zobacz moją odpowiedź tutaj .
Czarny ogień
Blackfire to profiler PHP stworzony przez SensioLabs, gości z Symfony2 https://blackfire.io/
Jeśli używasz Puphpet do konfiguracji maszyny wirtualnej, z przyjemnością dowiesz się, że jest obsługiwana ;-)
źródło
memprof_enable
w swoim kodzie PHP i otrzymałemPHP Fatal error: Uncaught Error: Call to undefined function memprof_enable()
. Zrobiłem instalację gperftools z ich aktualnego kodu źródłowego.php -i
na cli lub a,phpinfo()
aby sprawdzić, czy poprawnie ładujesz rozszerzenie. Jeśli go tam nie masz, prawdopodobnie warto przyjrzeć się swoim*.ini
plikom.sudo pecl install memprof-1.0.0
.Cóż, może to nie być dokładnie to, czego szukasz, ale PHP ma kilka wbudowanych funkcji, które wyświetlają zużycie pamięci. Jeśli chcesz tylko zobaczyć, ile pamięci zużywa wywołanie funkcji, możesz użyć memory_get_peak_usage () przed i po wywołaniu i wziąć różnicę.
Używasz tej samej techniki do swoich danych, używając bardzo podobnej metody memory_get_usage () .
Całkiem nieskomplikowane podejście, ale jest to szybki sposób na sprawdzenie fragmentu kodu. Zgadzam się, że delty memów xdebug mogą być czasami zbyt rozwlekłe, aby były przydatne, więc często używam go po prostu do zawężenia do sekcji kodu, a następnie ręcznie zrzucam określone użycie pamięci dla małych fragmentów.
źródło
http://geek.michaelgrace.org/2012/04/tracing-php-memory-usage-using-xdebug-and-mamp-on-mac/
Jestem na komputerze Mac, więc jeśli korzystasz z systemu Windows, musisz to przetestować, ale to działa dla mnie.
Zmodyfikowałem plik tracefile-analyser.php i dodałem ścieżkę do pliku binarnego PHP u góry, aby można było go wywołać w terminalu jako zwykły skrypt unixowy.
#!/Applications/MAMP/bin/php5.3/bin/php <?php if ( $argc <= 1 || $argc > 4 ) {
Nie zapomnij chmodować tego pliku na 755.
Możesz łatwo utworzyć skrypt ruby watchr, który będzie automatycznie wywoływał skrypt za każdym razem, gdy tworzy plik profilu pamięci (* .xt). W ten sposób możesz dalej testować i obserwować swoje ulepszenia bez konieczności ciągłego wykonywania polecenia.
źródło