java - jstack 的输出缺少 tid 和 nid 信息

标签 java linux jstack

我有一个 Linux 机器,CPU 利用率几乎达到极限。我使用 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 显示 tid 和 nid?

最佳答案

当您使用 -F 时,您无法获取 tid 和 nid。
我相信你正在 jstack 一些不属于你的 pid。在执行 jstack 之前尝试切换到拥有 pid 的用户。试试下面的命令

sudo -u {user who own the process} jstack -l pid

关于java - jstack 的输出缺少 tid 和 nid 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26068370/

相关文章:

c++ - 即使我修改了 LD_LIBRARY_PATH,也找不到我的共享库

linux - NOOBS 已安装,但无法正常启动,出现内核紧急错误代码 0x00000004”

c - 静态链接的可执行文件的启动代码发出这么多系统调用?

java - 如何解释这个线程转储?

java - 如何使用 jstack 查找阻塞线程

java - jstack 输出中显示的大十六进制数字 "parking to wait for ..."是什么意思?

java - 如何在 ubuntu 中设置 java 中的类路径以及如何使用 jar?

java - Restdoc 在尝试记录子对象时抛出 org.springframework.restdocs.snippet.SnippetException

java - XML 编码 + 项目结构

java - 如何改进 else if 语句?