2010-09-09 12 views
8

Zastanawiam bicia się skryptJak "kosztowne" jest wykonanie jstack na działającej maszynie JVM?

  1. perspektywie co minutę (lub co pięć minut)
  2. run jstack przeciwko uruchomionego JVM w produkcji
  3. analizować dane wyjściowe jstack i zgadzają się co ja jestem zainteresowany
  4. eksport wyników do wykresów 24/365 przez scentralizowanej instalacji Kaktusy na innym serwerze

Ale nie mam pojęcia, jak drogie lub invasi ve jstack działa na działającej maszynie JVM. Jak kosztowne jest wykonywanie jstack na działającej maszynie JVM? Czy jestem nastawiony na świat cierpienia?

+0

Czy rozważałeś pomiar? –

+0

Zamiast uruchamiać jstack jako oddzielny proces, a co z uruchamianiem prostego profilera w aplikacji? Byłoby to bardziej wydajne, ponieważ nie jest konieczne obciążenie sieci. Napisałem takie narzędzie: http://code.google.com/p/h2database/source/browse/trunk/h2/src/main/org/h2/util/Profiler.java - możesz również przekonwertować je na. w razie potrzeby jsp. –

+0

@ Thorbjørn Ravn Andersen: Pardon? –

Odpowiedz

0

W zależności od liczby wątków i wielkości sterty, jstack może być dość kosztowny. JStack służy do rozwiązywania problemów i nie został zaprojektowany do zbierania statystyk. Być może lepiej jest użyć jakiejś formy na instrumentacji lub odsłonić interfejs JMX, aby uzyskać potrzebne informacje bezpośrednio, zamiast analizować ślady stosu.

+0

1000 wątków, sterty <1 GB. Jestem uważany za jstacka, ponieważ go znam i mogę szybko wdrożyć. JMX, podczas gdy realna opcja, będzie wymagać pewnego edumacation. –

3

Środek. Jednym z wariantów time (/ usr/bin/czas wierzę) ma opcję -p, która pozwala zobaczyć wykorzystane zasoby CPU:

ravn:~ ravn$ /usr/bin/time -p echo Hello World 
Hello World 
real   0.32 
user   0.00 
sys   0.00 
ravn:~ ravn$ 

Oznacza to, że zajęło 0,32 sekundy Czas ściany, używając 0.00 sekund czasu procesora w przestrzeni użytkownika i 0,00 sekundy w przestrzeni jądra.

Utwórz scenariusz testowy, w którym program działa, ale nie rób nic, i spróbuj porównać z użyciem Z i BEZ dołączania jstack np. każda sekunda. Wtedy masz twarde liczby i możesz eksperymentować, aby zobaczyć, co dałoby rozsądny narzut.

Moje przeczucie jest takie, że raz na pięć minut jest zaniedbywalne.

+0

OK: rzeczywiste 0,54, użytkownik 0,51, sys 0,07 w systemie lekko obciążonym. Spróbuję później dzisiaj. Poza tym jak długo to trwa, jaki wpływ ma JVV na JVM? Cały przystanek? –

+0

Pamiętaj, aby zmierzyć swoją aplikację, a nie wywołanie jstack. –

+0

To aplikacja internetowa działająca w Tomcat. Hmmm ... może powinienem uruchomić jstack w pętli i porównać liczbę wywołań na minutę z wykorzystaniem procesora Java Tomcat. Dziękuję za sugestię i pomagam przemyśleć to. –

3

wiem, ta odpowiedź jest późno do partii, ale kosztowną częścią jstack pochodzi z mocowania do interfejsu debuggera nie ogólnie generowania ślady stosu z ważnym wyjątkiem (i wielkość sterty nie ma znaczenia w ogóle):

Śledzenia stosu arbitralnego mogą być generowane tylko w bezpiecznym punkcie lub gdy wątek oczekuje (tj. Poza zakresem java). Jeśli wątek czeka/poza zasięgiem java, wątek żądający stosu przenosi zadanie, wykonując samodzielnie chodzenie po stosie. Jednakże możesz nie chcieć "przerywać" wątku, aby chodzić po swoim stosie, szczególnie gdy trzyma on blokadę (lub robi trochę zajętego oczekiwania). Ponieważ nie ma sposobu na kontrolowanie bezpiecznych punktów, należy wziąć pod uwagę ryzyko.

Inna opcja w porównaniu do jstack, unikająca dołączania do interfejsu debugowania: Thread.getAllStackTraces() lub za pomocą ThreadMXBean, uruchom go w procesie, zapisz w pliku i użyj zewnętrznego narzędzia do odpytywania tego pliku.

Ostatnia uwaga: uwielbiam jstack, jest niezmiernie ważny w systemie produkcyjnym.

+0

+1 za prześladowanie mnie;) ale poważnie, dziękuję za odpowiedź. –

+0

@StuThompson, jestem skłonny odpowiedzieć na to również: http://stackoverflow.com/questions/3651737/why-the-odd-performance-curve-differential-between-bytebuffer-allocate-and-byt krótka odpowiedź to że bufory niebezpośrednie ssają na prawdziwe, jeśli potrzebujesz bardziej dopracowanych informacji, mogę spróbować ... Nie publikuję dużo i staram się sprawdzać profile osób, których posty mnie interesują. To pytanie nie miało żadnej odpowiedzi, więc miałem nadzieję, że uda mi się oświecić. – bestsss

+0

um, szukałem czegoś więcej niż * "non-direct bufferes ssać" * ... to jest coś, co sam sobie dobrze udokumentowałem dzięki testom porównawczym;) Jestem bardzo ciekawy rozbieżności na tym urwisku. –

Powiązane problemy