Выход из jstack отсутствует информация о TID и NID

У меня есть Linux с почти максимальной загрузкой процессора. я использовал top отследить нарушающий Java-процесс (12462) и лежащие в его основе потоки (12465 и 12466). Я надеялся бежать jstack и поиск в выходных данных для 30b1 и 30b2 (вышеупомянутые потоки преобразованы в шестнадцатеричные), чтобы я мог выяснить, что делает Java.

Когда я побежал jstack без каких-либо флагов он вернул следующую ошибку:

12462: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding

Тем не менее, когда я побежал jstack -F вывод не содержал информацию tid или nid. Вот выдержка из вывода:

Thread 31374: (state = IN_NATIVE)
 - java.net.SocketInputStream.socketRead0(java.io.FileDescriptor, byte[], int, int, int) @bci=0 (Compiled frame; information may be imprecise)
 - java.net.SocketInputStream.read(byte[], int, int, int) @bci=79, line=150 (Compiled frame)
 - java.net.SocketInputStream.read(byte[], int, int) @bci=11, line=121 (Compiled frame)
 - org.apache.coyote.http11.InternalInputBuffer.fill(boolean) @bci=59, line=516 (Compiled frame)
 - org.apache.coyote.http11.InternalInputBuffer.fill() @bci=2, line=501 (Compiled frame)
 - org.apache.coyote.http11.Http11Processor.setRequestLineReadTimeout() @bci=90, line=173 (Compiled frame)
 - org.apache.coyote.http11.AbstractHttp11Processor.process(org.apache.tomcat.util.net.SocketWrapper) @bci=156, line=925 (Compiled frame)
 - org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(org.apache.tomcat.util.net.SocketWrapper, org.apache.tomcat.util.net.SocketStatus) @bci=149, line=585 (Compiled frame)
 - org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run() @bci=130, line=312 (Compiled frame)
 - java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) @bci=95, line=1145 (Compiled frame)
 - java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=5, line=615 (Interpreted frame)
 - java.lang.Thread.run() @bci=11, line=722 (Interpreted frame)

Я побежал jstack -F -l но команда, казалось, заперта.

Когда я побежал jstack -F -mМне удалось найти десятичные потоки, но вывод не содержал достаточно фактического стека Java, чтобы я мог понять, что он делает. Вот еще одна часть вывода:

----------------- 12465 -----------------
0x0000003e54889dd0      _wordcopy_fwd_aligned + 0x140

Что мне не хватает? Как я могу получить jstack чтобы показать мне все время?

1 ответ

Когда вы используете -F, вы не можете получить tid и nid.
Я полагаю, что вы вставляете какой-то pid, который вам не принадлежит. Попробуйте переключиться на пользователя, которому принадлежит pid, перед выполнением jstack. Попробуйте следующую команду

sudo -u {user who own the process} jstack -l pid
Другие вопросы по тегам