2012-11-13 8 views
7

Muszę zaglądnąć do stosu 2 zaklejonych wątków, aby przeanalizować sytuację. JVM jest teraz dostępny na żywo, a dane tam są, ale potrzebuję jakiegoś narzędzia do wyodrębnienia go z procesu. Dbam tylko o 6 zmiennych w stosie typu String. Wszelkie pomysły są bardzo cenne. JVM wersje 6_35, jest to linux, JMX jest włączone, ale nie mam skonfigurowanego połączenia profiler/debugger. Bardzo trudno jest się rozmnażać.Czy mogę zrzucić bieżące zmienne stosu wątków z żywej maszyny JVM?

+3

Witaj, czekaj! – ShiDoiSi

Odpowiedz

3

Nie możesz tego łatwo zrobić. Normalne narzędzie jstack zrzuci tylko stos. Technicznie możesz spróbować zrzucić całą stertę (używając jmap), ale szukanie tych konkretnych zmiennych może być uciążliwe, jeśli to możliwe.

Należy pamiętać, że nie jest to łatwe ze względów bezpieczeństwa. Ślady stosu mogą zawierać dane uwierzytelniające lub inne poufne dane.

+2

Wątpię, aby ze względów bezpieczeństwa "niełatwe do wykonania" nigdy nie jest dobrym podejściem do hakowania. Tylko moje 2 centy. –

0

można wysłać proces o SIGQUIT który daje dump and keep the VM running na uniksopodobnego OS z Sun/Oracle JVM, podobnie jak IBM's JVM - nie wiem, czy wynik będzie odpowiedni dla twoich celów, trudne. Prawdopodobnie podobne do jstack/jmap w drugiej odpowiedzi.

+0

To po prostu daje zrzut wątku (sekwencja nazwanych metod dla każdego wątku), a nie stan zmiennych w każdym wątku. –

1

Znalazłem małą sztuczkę za pomocą przeglądarki zrzutu sterty (w tym przypadku Twoja aplikacja, ale inne mogą również działać). Zasadniczo wyliczasz wszystkie wystąpienia klasy Thread, następnie odnajdujesz wątek według nazwy i otwierasz go. Zmienne stosu są oznaczone jako < lokalnej zmiennej> tak:

enter image description here

Nie wszystkie zmienne są tutaj, ale wyświetlane są wszystkie, które są przekazywane jako argumenty do metody. Zastanawiam się, czy profilerzy mogą jeszcze lepiej rozwiązać ten problem?

Powiązane problemy