Mam następujący problem:
Wdrażam aplikację internetową w Tomcat (Linux) i po zamknięciu Tomcat, jeśli robię ps -ef
nadal widzę uruchomiony proces java
.
Wierzę, że dzieje się tak z powodu zwisającego wątku, ale nie wiem, jak mogę to śledzić.
Jak mogę debugować ten problem?Jak mogę debugować zwisający wątek java?
Odpowiedz
Można generować 4-5 zrzuty wątków zgodnie z poniższym opisem, a następnie analizować je przy użyciu narzędzi takich jak Samurai.
To, co chcesz sprawdzić, to kiedy utkniesz w wątku lub długa uruchomiona transakcja, wszystkie zrzuty wątku pokaże pewien identyfikator wątku na tym samym wierszu w twoim stosie java. Mówiąc prościej, transakcja obejmuje wiele zrzutów wątków i dlatego wymaga więcej badań.
Teraz po uruchomieniu ich przez Samurai podświetli się je kolorem czerwonym, aby można było szybko kliknąć i wyświetlić wiersze z problemami.
Zobacz przykład tego here. Spójrz na obraz wyjściowy Samurai w tym łączu. Zielone komórki są w porządku. Czerwone i szare komórki wymagają patrzenia.
Generowanie wysypisko wątku:
(Linux)
Jeśli JVM działa w konsoli następnie wystarczy nacisnąć Ctrl-\
. Jeśli JVM jest uruchomiony w tle, a następnie wysłać go Quit sygnał:
kill -QUIT process_id
PROCESS_ID jest numerem procesu uruchomionego procesu Java. Zrzut wątku zostanie wysłany tam, gdzie przekierowane jest standardowe wyjście. można zazwyczaj uzyskać numery procesowych wszystkich uruchomionych procesów Java za pomocą polecenia:
ps axf | grep java
Mówisz Twój proces java nadal istnieje, prawda? Procesy istnieją tak długo, jak długo mają załączone wątki, prawda? Jeśli tak, chciałbym przejść do następnego podejścia: - uruchomić proces z serwera MBean załączonym i zarządzane wewnętrznie przez JVM
Następnie podłącz do procesu po wysłaniu sygnału zamknąć i uzyskać zrzut wątek (tam powinny być JMX za to. Zobacz, które wyglądają podejrzanie nici do ciebie.
myślę, że można także użyć JVisualVM podjąć wątek wysypisk ...
Nie wiem, jak zrobić to, co polecasz – Jim
To wygląda jeszcze łatwiej, ale było już sugerowane przez aviad :): http://www.crazysquirrel.com/computing/java/basics/java-thread-dump.jspx –
Jeśli chodzi o podejście JVisualVM - oto tutorial http://docs.oracle.com /javase/6/docs/technotes/guides/visualvm/threads.html. Zasadniczo jvisualvm to po prostu plik wykonywalny, który można znaleźć w folderze $ JAVA_HOME/bin ... uruchom go, połącz się z aplikacją i zobacz, co możesz z nią zrobić. Całkiem potężne rzeczy, naprawdę :) –
- 1. Jak debugować wątek w Visual Studio?
- 2. Jak mogę debugować makra?
- 3. Jak mogę debugować AppleScript?
- 4. Jak zrestartować wątek w java?
- 5. Jak debugować układy Swapu Java
- 6. Jak mogę debugować aplikacje w Java Web Start (JNLP)?
- 7. Jak mogę debugować ciche błędy w aplikacjach Java?
- 8. Jak mogę debugować skrypt Perla?
- 9. Jak mogę debugować reguły mod_rewrite?
- 10. Jak mogę debugować php gettext?
- 11. Jak debugować tylko jeden wątek w programie Visual Studio
- 12. update-alternatives: ostrzeżenie:/etc/alternatives/java jest zwisający
- 13. Wątek Java Server Zatrzymaj
- 14. Jak debugować skompilowany kod Java w Eclipse
- 15. wątek java stan
- 16. Timer w Java Wątek
- 17. Czy mogę debugować Exe
- 18. Java - Jak sprawdzić, kiedy wątek czeka?
- 19. Jak debugować aplikację internetową Java w Netbeans?
- 20. serializacja obiektów java - wątek bezpieczny?
- 21. Jak mogę debugować PHP w IIS?
- 22. Jak mogę debugować wyrażenie regularne w Pythonie?
- 23. Jak mogę debugować żądanie ajax jQuery?
- 24. ADFS 2.0 - Jak mogę debugować "401 - Nieautoryzowane"?
- 25. Jak mogę debugować POST dla webhook?
- 26. Jak mogę debugować mapę Hadoop zmniejszyć
- 27. java: przerywa wątek absolutnie konieczny
- 28. Jak mogę całkowicie zakończyć wątek Lua?
- 29. Czy mogę debugować skompilowany zespół?
- 30. Nie mogę debugować przy użyciu punktów przerwań
Jego nie że Jim prosi On prosi o debugowanie approch –
@ user1348753, patrz edycja: – aviad
@aviad: Zrobiłem 'kill -3' i wczytałem javacore do Samuraja. Nie było żadnej wizualnej tabeli po prostu log repor t.Jak mogę śledzić wątek z tego raportu? – Jim