2013-01-11 12 views
6

jestem debugowania starszych aplikacji Java, a zrzut wątek (uzyskane poprzez jstack) zawiera niektóre wpisy, jak następuje:Jak interpretować wątek Java, który jest RUNNABLE, ale bez śledzenia stosu?

"Thread-8" prio=10 tid=0x0000000055f2c800 nid=0x49bf runnable [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

to wszystko. Brak śledzenia stosu.

Co tu się dzieje? Jak zlokalizować kod Java wykonujący w tym wątku?

+0

Dlaczego wysłałeś to jako komentarz, a nie odpowiedź? – noahlz

+0

Nazwa wątku nie jest w ogóle pomocą; powinni zawsze poprawnie nazywać wątki. – irreputable

+0

@noahz: Nie miałem do tego zaufania. Uczyniłem to odpowiedzią, a zobaczymy, czy społeczność to lubi. –

Odpowiedz

3

Wątek nie jest (lub nie był) wykonywany w kodzie Java. Jest to obsługa zadań nie zaimplementowanych w Javie, które nie były bezpośrednio wymagane przez żadnego wywołującego Java. Na przykład, jeśli odpowiadający mu wątek systemu operacyjnego po prostu przechwycił sygnał.

+1

Być może są to theads wykonywane z powodu samego 'jstack'? Czy mogę dodać flagę do jstack, która ujawnia natywne ramki? – noahlz

+0

Aplikacja Java wywoływała bibliotekę C za pośrednictwem JNI, która uruchomiła macierzyste wątki Linux. – noahlz

Powiązane problemy