2011-07-16 15 views
6

To może wydawać się głupie pytanie, ale po zadaniu kilku pytań na temat stackoverflow i spojrzeniu na pytanie innych ludzi, jedną rzeczą, która często pojawia się jest użycie profilerów, aby zobaczyć, która część kodu działa wolno, itp.Potrzebujesz wiedzieć, jak używać profilerów/który z nich używać

Będąc początkującym programistą, jestem nowy w tym wszystkim, ale ponieważ tworzę coraz większy projekt, uważam, że takie narzędzie może okazać się bardzo przydatne w czasy. Jedyną rzeczą jest to, że nie wiem, jak z nich korzystać.

Zwykle używam JDeveloper do kodowania w Javie i czytam w Internecie, że jest on wbudowany. Próbowałem go używać, ale myślę, że tak naprawdę nie wiedziałem, jak to zrobić, ponieważ nie mogłem znaleźć, które części powodują spowolnienie mojego programu. Nie wiem, czy to dlatego, że nie wiem, jak z niego korzystać, czy też wiadomo, że nie jest dobry, więc pomyślałem, że zapytam, z którym powinienem zacząć.

Mam również zainstalowany Eclipse i wiem, jak go używać (używam Eclipse, gdy koduję jakiś Python lub gdy próbuję samouczki do rozwoju Androida), więc jeśli istnieje darmowy profiler, który mógłbym użyć dla którykolwiek z tych dwóch IDE, naprawdę chciałbym o tym wiedzieć. Również samouczek lub podstawowe rzeczy, które muszę wiedzieć o profilerach, bardzo mi pomogły.

Z góry dziękuję i przepraszam, że moje pytanie nie dotyczy programowania, ale wydaje się, że to najlepsze miejsce do zdobycia cennych informacji na temat profilerów.

Odpowiedz

3

Jeśli jesteś zdezorientowany, so are most of the profiler vendors.

Pierwszą rzeczą, którą należy zrozumieć, to - programy nie są wolne, ponieważ mają wolne części (wąskie gardła). Są powolne, ponieważ robią więcej, niż muszą. Mają czas drenażu.

To jak wyścig koni. Wąskie gardło byłoby wąskim miejscem na torze, gdzie konie muszą się piętrzyć i zwolnić. Odpływ czasu byłby podobny do innego utworu połączonego z pierwszym, w którym konie wędrują i muszą przebyć dodatkową odległość. Potem może być inny utwór połączony z tym i innym, i tak dalej.

Wywołanie funkcji, którego można uniknąć, jest przykładem upływu czasu.

Here's how I find time drains. Jest prosty i niezależny od języka. Można to nawet zrobić za pomocą prostego narzędzia, takiego jak jStack.

Konstruktorzy profilów dobrze sobie radzą, ale przeszkadza im mnóstwo mylących koncepcji.

Takie jak "gdzie czas jest poświęcony". Jeśli to oznacza "gdzie najczęściej znajduje się licznik programu", to tak, jakby koń był na niewłaściwym torze wyścigowym. Możesz spróbować skrócić ten tor, ale prawdziwym problemem jest to, że koń nie powinien tam być. to jest wywołanie funkcji, którego powinno się unikać.

Takich jak "statystyczna dokładność pomiaru". Czy musisz zmierzyć, ile czasu zajmuje końowi pokonanie niewłaściwego toru wyścigowego, aby wiedzieć, że znajduje się on na niewłaściwym torze wyścigowym? Nie, wystarczy wziąć migawkę (próbkę stosu). Im dłuższa jazda jest na niewłaściwym torze wyścigowym, tym bardziej prawdopodobne, że ją zobaczysz. Jeśli widzisz go tam dwa razy, wiesz, jaki jest problem.

Takie jak nazywanie go "profilerem procesora", który jest pretekstem do zignorowania czasu we/wy. Czasami drenaż czasu jest niepotrzebny I/O, którego nie byłeś świadomy. To by było jak koń zatrzymujący się chrupać na woreczku owsa. Jeśli możesz wykonać tylko migawkę, gdy koń jest uruchomiony, nigdy nie zauważysz, że. Można tylko zauważyć, że czas był podejrzanie długi.

Jest more where those came from ...

+0

Opublikowane przez ciebie linki są bardzo interesującymi lekturami. Spróbuję zastosować to, co zasugerowałeś i jestem pewien, że to pomoże w przyszłości. Wielkie dzięki! –

3

Jeśli szukasz darmowego narzędzia, jvisulavm jest świetnym rozwiązaniem. Jest dostarczany ze standardową instalacją JDK, jego plik wykonywalny znajduje się zwykle w katalogu bin katalogu JAVA_HOME, obok java, javac, javadoc i ich rodzeństwa. Oto poradnik:

http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/index.html

Jeśli szukasz bardziej zaawansowanym produktem handlowym YourKit lub jprofiler są zarówno interesujące.

+1

VisualVM uwalnia bardziej regularnie niż JDK, więc może chcesz, aby pobrać najnowszą wersję [] (http://visualvm.java.net/download.html). –

1

Używanie narzędzia profiler nie jest prostym zadaniem i wymaga dużej wiedzy na temat wewnętrznych elementów VM. Najlepiej zacząć od przeczytania o zarządzaniu pamięcią, gorącym miejscu itp. Przydatne strony można znaleźć na stronach pomocy profilera, zobacz na przykład: help for JProfiler.

Z mojego doświadczenia wynika, że ​​musiałem używać profilera tylko kilka razy, gdy pojawiły się poważne problemy z wydajnością, których nie można było śledzić w inny sposób. W wielu przypadkach proste czynności, takie jak sygnatury czasowe w dzienniku, pomagają rozwiązać problemy z wydajnością. Użyj profilera jako ostateczności. Powiedziałem, że słyszałem o przypadkach, kiedy ludzie używali go regularnie. Chociaż o tym nie wiem, ale nigdy nie udało mi się sprawić, aby ten proces zadziałał u mnie.

Nie mogłem znaleźć żadnego bezpłatnego profilera, który by mnie usatysfakcjonował. Komercyjne, których używałem w różnych czasach to JProbe i JProfiler. Podobał mi się bardziej JProfiler, ale oba pozwalają uzyskać wyniki.

Zasadniczo proces rozpoczyna się od skonfigurowania aplikacji w programie profilującym i wskazania klas, które mają być szczegółowo analizowane. Po uruchomieniu aplikacji w profilerze, klasy zostają oprzyrządowane w taki sposób, że nagrywane są informacje o wykonywaniu i VM. Więc po uruchomieniu aplikacji możesz ją przeanalizować, aby zobaczyć, który kod jest zużywany przez większość czasu i jakie obiekty wykorzystują większość pamięci. Często można również monitorować wątki, monitory i wiele innych rzeczy. Aby wykorzystać wszystkie dane, musisz dobrze zrozumieć wewnętrzne funkcje VM i kodowany profil.

Powodzenia!