2014-11-20 26 views
33

Dowiedziałem się o flame graphs i odkryłem, że są fascynujące - jednak nie mogłem znaleźć żadnego użytecznego odniesienia do tego, jak je wygenerować dla mojego skryptu PHP. Jak mogę zebrać dane i wygenerować wykresy za pomocą PHP?Jak generować wykresy płomienia za pomocą PHP?

+2

Brendan Gregg ma [* dużo do powiedzenia *] (http://www.brendangregg.com/FlameGraphs/cpuflamegraphs) o wykresach płomienia, jeśli to pomaga. Osobiście uważam, że są przereklamowani. Drażnią Cię piknymi pikselami, ale rzeczy, które możesz naprawić, aby przyspieszyć kod [* można łatwo ukryć przed nimi *] (http://stackoverflow.com/a/25870103/23771). –

+0

@MikeDunlavey: Nie dbam również o ładne piksele, ale nie zgadzam się również z twoją oceną wykresów płomienia jako okiem. Czynią one * niektóre * (nie wszystkie!) Zadania profilowania o wiele łatwiejsze, co jest w porządku przeze mnie. Czy wiesz, w jaki sposób mogę zrobić je dla aplikacji internetowych PHP? :) – johndodo

+0

Gdybym chciał je zrobić, chciałbym zebrać dużo próbek stosu (na czas zegarowy, a nie procesor). Biorąc pod uwagę każdą próbkę jako długi ciąg, sortowałbym je w porządku leksykalnym. Następnie przypisz kolor do każdej poszczególnej funkcji. Następnie wystarczy przeskanować posortowaną listę i uczynić każdą procedurę jako kolorowy prostokąt. Moim jedynym celem jest to, że jeśli potrzebujesz prędkości, nawet jeśli jeden na pięć przyspieszeń wymyka się twojej uwadze, to zapobiegnie osiągnięciu pożądanej prędkości przez duży czynnik. Ponieważ po wyczyszczeniu innych, te, których nie dostajesz, stają się dominujące. –

Odpowiedz

6

Możesz użyć Xdebug do tworzenia profili cachegrind twojego kodu php. Możesz rzucić okiem na this project, który obsługuje wyjście cachegrind xdebug za pomocą php.

+1

Jeśli dobrze rozumiem, chodzi o to, aby zbudować narzędzie, które analizuje dane wyjściowe bufora podręcznego i wyświetla je na wykresach płomienia? To brzmi dobrze ... – johndodo

+0

Nie wydaje się, że istnieje gotowe do użycia narzędzie zbudowane z PHP, ale może kcachegrind może to zrobić ... – n00dl3

+0

i odpowiedzieć na twoje pytanie, tak, to wszystko! – n00dl3