Выход из 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