在 Java 应用的线上问题排查过程中,查看线程栈信息是一项至关重要的技能。线程栈信息能够帮助我们快速定位线程阻塞、CPU 飙升等问题的根源。作为一款功能强大的线上诊断工具,Arthas 提供了便捷的
thread
命令,让我们可以轻松查看线程栈信息,进而高效地解决问题。下面将介绍如何使用 Arthas 的
thread
命令查看线程栈信息,并结合具体命令示例,帮助你更好地理解和应用。
一、查看所有线程状态及基本信息
直接执行 thread
命令,即可列出应用中所有线程的基本信息。这些信息包括线程 ID、名称、状态及堆栈深度等,使我们对整个应用的线程运行状况一目了然。例如:
thread
执行上述命令后,将输出类似以下的结果:
Thread[http-nio-8080-exec-1,5,main]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:165)
at sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:178)
at java.net.Socket$SocketInputStream.read(Socket.java:959)
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1256)
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1187)
at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:726)
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:366)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Thread[http-nio-808