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?
Odpowiedz
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.
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. –
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.
To po prostu daje zrzut wątku (sekwencja nazwanych metod dla każdego wątku), a nie stan zmiennych w każdym wątku. –
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:
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?
- 1. Zrozumienie maszyny JVM Lepiej
- 2. Jak sprawdzić użycie sterty uruchomionej maszyny JVM z wiersza poleceń?
- 3. Jak dodać moduł Javaagent do maszyny JVM bez zatrzymywania maszyny JVM?
- 4. Jak mogę zrzucić wszystkie zmienne PHP w bieżącym zakresie?
- 5. bieżące wątki zwiększające logikę/stos wątków wycieka
- 6. W jaki sposób maszyny JVM implementują IdentityHashMap?
- 7. Czy mogę przerwać bieżące polecenie bash?
- 8. Czy mogę wywołać XMPPConnection.sendPacket z równoczesnych wątków?
- 9. Czy mogę dodać nowy certyfikat do magazynu kluczy bez restartowania maszyny JVM?
- 10. Omówienie użycia stosu jvm elastycznego przeszukiwania
- 11. Czy wiele wątków w aplikacjach JVM jest drogich?
- 12. Uzyskiwanie zmiennych lokalnych z ramki stosu w JVM
- 13. Programowo wykryć, czy JVM korzysta z dzielenia klas, czy nie?
- 14. W ramach działającej maszyny JVM, jak programowo określić opcje jvm używane podczas uruchamiania?
- 15. Czy istnieje przenośny sposób sprawdzenia, ile plików JVM ma otworzyć z wnętrza maszyny wirtualnej?
- 16. Czy zmienne stosu C są przechowywane w odwrotnej kolejności?
- 17. Czy mogę zrzucić bieżącą konfigurację nconf do obiektu?
- 18. Jak wydrukować zmienne argumenty o nazwach z poprzedniego stosu?
- 19. W gevent, w jaki sposób mogę zrzucić ślady stosu wszystkich uruchomionych greenletów?
- 20. W jaki sposób podajesz bieżące zmienne środowiska użytkownika?
- 21. Dlaczego potrzebuję brokera do mojego produkcyjnego stosu ELK + specyfikacji maszyny?
- 22. c & gcc: Wzrost i wyrównanie stosu - dla maszyny 64-bitowej
- 23. Bezpieczeństwo wątków: zmienne klas w języku Ruby
- 24. Czy mogę przekazywać zmienne env przez ssh?
- 25. Czy mogę zmienić typ instancji maszyny wirtualnej GCE w locie?
- 26. Z zamknięciami Scala, kiedy przechwycone zmienne zaczynają żyć na sterty JVM?
- 27. Wątek natywny przełączany kontekstowo nie może być dołączony do JVM
- 28. Problemy z pamięcią JVM
- 29. Znajomość NUMA JVM
- 30. Czy mogę przekazywać zmienne za pomocą EventEmitter z komponentu angle2?
Witaj, czekaj! – ShiDoiSi