Używam kill -3
polecenia, aby zobaczyć zrzut wątku maszyny JVM w systemie UNIX. Ale gdzie mogę znaleźć dane wyjściowe tego kill
polecenia? Zgubiłem się!!
java
multithreading
dump
javanerd
źródło
źródło
Odpowiedzi:
Możesz alternatywnie użyć jstack (dołączony do JDK), aby wykonać zrzut wątku i zapisać wynik w dowolnym miejscu. Czy to nie jest dostępne w środowisku uniksowym?
źródło
Zrzut wątku jest zapisywany w systemie z maszyny wirtualnej, na której wykonano plik
kill -3
. Jeśli przekierowujesz dane wyjściowe konsoli JVM do pliku, zrzut wątku będzie znajdował się w tym pliku. Jeśli maszyna JVM działa w otwartej konsoli, zrzut wątku zostanie wyświetlony w jej konsoli.źródło
Istnieje sposób na przekierowanie wyjścia zrzutu wątku JVM w przypadku sygnału przerwania do oddzielnego pliku z opcją diagnostyczną LogVMOutput :
źródło
jcmd
Preferowanym podejściem jest Java 8 na ilustracji .Poniżej znajduje się fragment z dokumentacji Oracle :
Wydanie JDK 8 wprowadziło Java Mission Control, Java Flight Recorder i narzędzie jcmd do diagnozowania problemów z aplikacjami JVM i Java. Zaleca się użycie najnowszego narzędzia jcmd zamiast poprzedniego narzędzia jstack w celu ulepszenia diagnostyki i zmniejszenia narzutu wydajności.
Jednak wysyłanie tego z aplikacją może mieć konsekwencje licencyjne, których nie jestem pewien.
źródło
jcmd
nie udaje się połączyć z procesem obsługi systemu Windows,com.sun.tools.attach.AttachNotSupportedException: Insufficient memory or insufficient privileges to attach
podczas gdy sięjstack -F
udaje: stackoverflow.com/questions/1197912/ ...W tej samej lokalizacji, w której znajduje się standardowe wyjście maszyny JVM. Jeśli masz serwer Tomcat, będzie to
catalina_(date).out
plik.źródło
Używając kill -3, powinieneś zobaczyć zrzut wątku na standardowym wyjściu. Większość serwerów aplikacji zapisuje standardowe wyjście w oddzielnym pliku. Powinieneś go tam znaleźć, używając kill -3. Istnieje wiele sposobów uzyskiwania zrzutów wątków:
kill -3 <PID>
: Daje wyjście na standardowe wyjście.W przypadku maszyn wirtualnych typu hotspot możemy również użyć
jstack
polecenia do wygenerowania zrzutu wątku. To część JDK. Składnia jest następująca:źródło
kill -3 <PID>
powinno zabijać JVM. Jakiego typu aplikacji Java szukasz?W Jboss możesz wykonać następujące czynności
Spowoduje to przekierowanie wyjścia / zrzutu wątku do konsoli plików określonej w powyższym poleceniu.
źródło
źródło
Kroki, które należy wykonać, aby wykonać zrzut wątku samodzielnego procesu Java
Krok 1: Uzyskaj identyfikator procesu dla skryptu powłoki wywołującego program java
Krok 2: Uzyskaj identyfikator procesu dla dziecka, które zostało wywołane przez runABCD. Użyj powyższego PID, aby uzyskać childs.
Krok 3: Pobierz JSTACK dla konkretnego procesu. Uzyskaj identyfikator procesu swojego procesu XYSServer. tj. 8536
źródło