Śledzenie czasu wykonywania linii

Odpowiedz Nowy wątek
2019-08-22 13:24
0

Cześć, czy istnieje narzędzie (w intellij/eclipse) pokazujące czas wykonywania konkretnych linii w kodzie, np. podczas trybu debugu. Czy jedyny sposób to po prostu porównywanie dwóch dat: sprzed wykonania linii/metody i po (co oczywiście jest bardzo brudnym sposobem, bo nie tylko czasochłonnym i wtórnym, ale też ingerującym bezpośrednio w kod programu) .

szukaj słowa Profiler - AnyKtokolwiek 2019-08-22 14:03

Pozostało 580 znaków

2019-08-22 14:05
0

Profiler Twoim przyjacielem w przypadku takich problemów.
Korzystałem z kilku
1) Visual VM -> prosty i łatwy w obsłudze, ale często się wiesza i zamula aplikacje
2) xrebel -> fajny tool, ale nie jest darmowy no i chyba nie do końca to jest profiler z pierwszego zdarzenia
3) https://github.com/jvm-profiling-tools/async-profiler -> ostatnio ktoś mi polecił to narzędzie i muszę przyznać, że bardzo fajnie się sprawdził aczkolwiek tutaj nie zobaczy się czasu wykonania metod tylko ich % udział w całości
A no i jest jeszcze
https://github.com/Netflix/flamescope którego nie używałem, ale z tego co przeczytałem fajnie pokazuje czasy wykonania metod.

edytowany 2x, ostatnio: podroznik, 2019-08-22 14:12

Pozostało 580 znaków

2019-08-22 14:31
0

@podroznik: miałem już pewne doświadczenia z VisualVM, ale jedynie aby podpiąć się do np. tomcata i śledzić zużycie pamięci, albo śledzić pracę wątków ogólnie (zrzuty pamięć oraz zrzuty wątków, wykresy zużycia), jednak nie wiem w jaki sposób przy pomocy visualvm określić czas wykonywania pewnych linii w metodzie. Jeżeli mógłbyś mnie nakierować wysyłając jakiś tutorial, albo artykuł w tym temacie byłbym Ci wdzięczny.

@podroznik Masz na myśli w kontekście VisalVM -> Sampler ?

edytowany 2x, ostatnio: Algorytmistrz, 2019-08-22 14:39
Napisał Ci, profiler Twoim przyjacielem - lion137 2019-08-22 15:09

Pozostało 580 znaków

2019-08-22 15:09
0

W kontekście VisualVm korzystałem z zakładki Profiler/CPU. Tam wtedy Ci rozbija wywołanie metod i jesteś w stanie zobaczyć co najwięcej czasu pochłania. Nie do końca rozumiem co masz na myśli konkretne linie w metodzie?

Pozostało 580 znaków

2019-08-22 15:24
1

Mierzy się całe metody a nie "linie". Twoich linii kodu w ogóle może nie być bo zostaną zoptymalizowane i co wtedy? :P


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
Pokaż pozostałe 4 komentarze
@Algorytmistrz: im większa granulacja tym większy narzut profilera masz. Bo tam nie ma magii, on musi sobie ten czas liczyć, więc jak miałbyś timer co linie to program by działał milion razy wolniej i nie byłbyś w stanie odpalić swojego test-case który chcesz profilować ;) - Shalom 2019-08-22 15:48
@Shalom: Ale jeżeli metoda miałaby 50 linii, a jeżeli któraś z linii by wykonywała się stosunkowo długo to byłoby dobry punkt wyjścia do optymalizacji tej metody. - Algorytmistrz 2019-08-22 15:54
Jeśli metoda ma 50 linii to juz jest pierwszy problem. A jeśli jeszcze wśród nich jest dużo linii które mogą sie wykonywać długo (bo nie umiesz na oko stwierdzić co w danej metodzie ją spowalania) to znaczy ze napisałeś gówniany kod i należy to refaktorować zanim weźmiesz sie za profilowanie :) - Shalom 2019-08-22 16:02
Mając metody po np. 10 linii szybko możesz zidentyfikować gdzie mniej więcej jest problem. Potem zawsze można przecież napisać jakieś micro benchmarki. - tdudzik 2019-08-22 16:08

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0