</script><metaname="aes-config"content="pid=xux-opensource&user_type=101&uid=&username=&dim10=arthas"><scriptsrc="//g.alicdn.com/alilog/mlog/aplus_v2.js"id="beacon-aplus"exparams="clog=o&aplus&sidx=aplusSidx&ckx=aplusCkx"></script><scriptsrc="//g.alicdn.com/aes/??tracker/1.0.34/index.js,tracker-plugin-pv/2.4.5/index.js,tracker-plugin-event/1.2.5/index.js,tracker-plugin-jserror/1.0.13/index.js,tracker-plugin-api/1.1.14/index.js,tracker-plugin-perf/1.1.8/index.js,tracker-plugin-eventTiming/1.0.4/index.js"></script><title>thread | arthas</title><metaname="description"content="arthas user document">
at java.management@11.0.7/sun.management.ThreadImpl.dumpThreads0<spanclass="token punctuation">(</span>Native Method<spanclass="token punctuation">)</span>
at java.management@11.0.7/sun.management.ThreadImpl.getThreadInfo<spanclass="token punctuation">(</span>ThreadImpl.java:466<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.command.monitor200.ThreadCommand.processTopBusyThreads<spanclass="token punctuation">(</span>ThreadCommand.java:199<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.command.monitor200.ThreadCommand.process<spanclass="token punctuation">(</span>ThreadCommand.java:122<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process<spanclass="token punctuation">(</span>AnnotatedCommandImpl.java:82<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access<spanclass="token variable">$100</span><spanclass="token punctuation">(</span>AnnotatedCommandImpl.java:18<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl<spanclass="token variable">$ProcessHandler</span>.handle<spanclass="token punctuation">(</span>AnnotatedCommandImpl.java:111<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl<spanclass="token variable">$ProcessHandler</span>.handle<spanclass="token punctuation">(</span>AnnotatedCommandImpl.java:108<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.shell.system.impl.ProcessImpl<spanclass="token variable">$CommandProcessTask</span>.run<spanclass="token punctuation">(</span>ProcessImpl.java:385<spanclass="token punctuation">)</span>
at java.base@11.0.7/java.util.concurrent.Executors<spanclass="token variable">$RunnableAdapter</span>.call<spanclass="token punctuation">(</span>Executors.java:515<spanclass="token punctuation">)</span>
at java.base@11.0.7/java.util.concurrent.FutureTask.run<spanclass="token punctuation">(</span>FutureTask.java:264<spanclass="token punctuation">)</span>
at java.base@11.0.7/java.util.concurrent.ScheduledThreadPoolExecutor<spanclass="token variable">$ScheduledFutureTask</span>.run<spanclass="token punctuation">(</span>ScheduledThreadPoolExecutor.java:304<spanclass="token punctuation">)</span>
at java.base@11.0.7/java.util.concurrent.ThreadPoolExecutor.runWorker<spanclass="token punctuation">(</span>ThreadPoolExecutor.java:1128<spanclass="token punctuation">)</span>
at java.base@11.0.7/java.util.concurrent.ThreadPoolExecutor<spanclass="token variable">$Worker</span>.run<spanclass="token punctuation">(</span>ThreadPoolExecutor.java:628<spanclass="token punctuation">)</span>
at java.base@11.0.7/java.lang.Thread.run<spanclass="token punctuation">(</span>Thread.java:834<spanclass="token punctuation">)</span>
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><ul><li>Without thread ID, including <code>[Internal]</code> means JVM internal thread, refer to the introduction of <ahref="/en/doc/dashboard.html"class="">dashboard</a> command.</li><li><code>cpuUsage</code> is the CPU usage of the thread during the sampling interval, consistent with the data of the <ahref="/en/doc/dashboard.html"class="">dashboard</a> command.</li><li><code>deltaTime</code> is the incremental CPU time of the thread during the sampling interval. If it is less than 1ms, it will be rounded and displayed as 0ms.</li><li><code>time</code> The total CPU time of thread.</li></ul><p><strong>Note:</strong> The thread stack is acquired at the end of the second sampling, which does not indicate that the thread is processing the same task during the sampling interval. It is recommended that the interval time should not be too long. The larger the interval time, the more inaccurate.</p><p>You can try to specify different intervals according to the specific situation and observe the output results.</p><h3id="list-first-page-threads-info-when-no-options-provided"tabindex="-1"><aclass="header-anchor"href="#list-first-page-threads-info-when-no-options-provided"aria-hidden="true">#</a> List first page threads' info when no options provided</h3><p>By default, they are arranged in descending order of CPU increment time, and only the first page of data is displayed.</p><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code>$ thread
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><h3id="thread-all-show-all-matching-threads"tabindex="-1"><aclass="header-anchor"href="#thread-all-show-all-matching-threads"aria-hidden="true">#</a> thread --all, show all matching threads</h3><p>Display all matching threads. Sometimes it is necessary to obtain all the thread data of the JVM for analysis.</p><h3id="thread-id-show-the-running-stack-for-the-target-thread"tabindex="-1"><aclass="header-anchor"href="#thread-id-show-the-running-stack-for-the-target-thread"aria-hidden="true">#</a> thread id, show the running stack for the target thread</h3><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code>$ thread <spanclass="token number">1</span>
<spanclass="token string">"main"</span><spanclass="token assign-left variable">Id</span><spanclass="token operator">=</span><spanclass="token number">1</span> WAITING on java.util.concurrent.CountDownLatch<spanclass="token variable">$Sync</span>@29fafb28
at sun.misc.Unsafe.park<spanclass="token punctuation">(</span>Native Method<spanclass="token punctuation">)</span>
- waiting on java.util.concurrent.CountDownLatch<spanclass="token variable">$Sync</span>@29fafb28
at java.util.concurrent.locks.LockSupport.park<spanclass="token punctuation">(</span>LockSupport.java:175<spanclass="token punctuation">)</span>
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt<spanclass="token punctuation">(</span>AbstractQueuedSynchronizer.java:836<spanclass="token punctuation">)</span>
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly<spanclass="token punctuation">(</span>AbstractQueuedSynchronizer.java:997<spanclass="token punctuation">)</span>
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly<spanclass="token punctuation">(</span>AbstractQueuedSynchronizer.java:1304<spanclass="token punctuation">)</span>
at java.util.concurrent.CountDownLatch.await<spanclass="token punctuation">(</span>CountDownLatch.java:231<spanclass="token punctuation">)</span>
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><h3id="thread-b-locate-the-thread-bocking-the-others"tabindex="-1"><aclass="header-anchor"href="#thread-b-locate-the-thread-bocking-the-others"aria-hidden="true">#</a> thread -b, locate the thread bocking the others</h3><p>In some occasions, we experience the whole application is stuck because there's one particular thread hold one lock that other threads are relying on. To diagnose such an issue, Arthas provides <code>thread -b</code> to find the problematic thread in one single command.</p><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code>$ thread <spanclass="token parameter variable">-b</span>
at java.lang.Thread.sleep<spanclass="token punctuation">(</span>Native Method<spanclass="token punctuation">)</span>
at test.arthas.TestThreadBlocking.doGet<spanclass="token punctuation">(</span>TestThreadBlocking.java:22<spanclass="token punctuation">)</span>
- locked java.lang.Object@725be470 <spanclass="token operator"><</span>---- but blocks <spanclass="token number">4</span> other threads<spanclass="token operator">!</span>
at javax.servlet.http.HttpServlet.service<spanclass="token punctuation">(</span>HttpServlet.java:624<spanclass="token punctuation">)</span>
at javax.servlet.http.HttpServlet.service<spanclass="token punctuation">(</span>HttpServlet.java:731<spanclass="token punctuation">)</span>
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter<spanclass="token punctuation">(</span>ApplicationFilterChain.java:303<spanclass="token punctuation">)</span>
at org.apache.catalina.core.ApplicationFilterChain.doFilter<spanclass="token punctuation">(</span>ApplicationFilterChain.java:208<spanclass="token punctuation">)</span>
at org.apache.tomcat.websocket.server.WsFilter.doFilter<spanclass="token punctuation">(</span>WsFilter.java:52<spanclass="token punctuation">)</span>
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter<spanclass="token punctuation">(</span>ApplicationFilterChain.java:241<spanclass="token punctuation">)</span>
at org.apache.catalina.core.ApplicationFilterChain.doFilter<spanclass="token punctuation">(</span>ApplicationFilterChain.java:208<spanclass="token punctuation">)</span>
at test.filter.TestDurexFilter.doFilter<spanclass="token punctuation">(</span>TestDurexFilter.java:46<spanclass="token punctuation">)</span>
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter<spanclass="token punctuation">(</span>ApplicationFilterChain.java:241<spanclass="token punctuation">)</span>
at org.apache.catalina.core.ApplicationFilterChain.doFilter<spanclass="token punctuation">(</span>ApplicationFilterChain.java:208<spanclass="token punctuation">)</span>
at org.apache.catalina.core.StandardWrapperValve.invoke<spanclass="token punctuation">(</span>StandardWrapperValve.java:220<spanclass="token punctuation">)</span>
at org.apache.catalina.core.StandardContextValve.invoke<spanclass="token punctuation">(</span>StandardContextValve.java:122<spanclass="token punctuation">)</span>
at org.apache.catalina.authenticator.AuthenticatorBase.invoke<spanclass="token punctuation">(</span>AuthenticatorBase.java:505<spanclass="token punctuation">)</span>
at com.taobao.tomcat.valves.ContextLoadFilterValve<spanclass="token variable">$FilterChainAdapter</span>.doFilter<spanclass="token punctuation">(</span>ContextLoadFilterValve.java:191<spanclass="token punctuation">)</span>
at com.taobao.eagleeye.EagleEyeFilter.doFilter<spanclass="token punctuation">(</span>EagleEyeFilter.java:81<spanclass="token punctuation">)</span>
at com.taobao.tomcat.valves.ContextLoadFilterValve.invoke<spanclass="token punctuation">(</span>ContextLoadFilterValve.java:150<spanclass="token punctuation">)</span>
at org.apache.catalina.core.StandardHostValve.invoke<spanclass="token punctuation">(</span>StandardHostValve.java:170<spanclass="token punctuation">)</span>
at org.apache.catalina.valves.ErrorReportValve.invoke<spanclass="token punctuation">(</span>ErrorReportValve.java:103<spanclass="token punctuation">)</span>
at org.apache.catalina.core.StandardEngineValve.invoke<spanclass="token punctuation">(</span>StandardEngineValve.java:116<spanclass="token punctuation">)</span>
at org.apache.catalina.connector.CoyoteAdapter.service<spanclass="token punctuation">(</span>CoyoteAdapter.java:429<spanclass="token punctuation">)</span>
at org.apache.coyote.http11.AbstractHttp11Processor.process<spanclass="token punctuation">(</span>AbstractHttp11Processor.java:1085<spanclass="token punctuation">)</span>
at org.apache.coyote.AbstractProtocol<spanclass="token variable">$AbstractConnectionHandler</span>.process<spanclass="token punctuation">(</span>AbstractProtocol.java:625<spanclass="token punctuation">)</span>
at org.apache.tomcat.util.net.JIoEndpoint<spanclass="token variable">$SocketProcessor</span>.run<spanclass="token punctuation">(</span>JIoEndpoint.java:318<spanclass="token punctuation">)</span>
at java.util.concurrent.ThreadPoolExecutor.runWorker<spanclass="token punctuation">(</span>ThreadPoolExecutor.java:1142<spanclass="token punctuation">)</span>
at java.util.concurrent.ThreadPoolExecutor<spanclass="token variable">$Worker</span>.run<spanclass="token punctuation">(</span>ThreadPoolExecutor.java:617<spanclass="token punctuation">)</span>
at org.apache.tomcat.util.threads.TaskThread<spanclass="token variable">$WrappingRunnable</span>.run<spanclass="token punctuation">(</span>TaskThread.java:61<spanclass="token punctuation">)</span>
at java.lang.Thread.run<spanclass="token punctuation">(</span>Thread.java:745<spanclass="token punctuation">)</span>
Number of locked synchronizers <spanclass="token operator">=</span><spanclass="token number">1</span>
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><blockquote><p>Note: By now Arthas only supports to locate the thread blocked by <code>synchronzied</code>, while <code>java.util.concurrent.Lock</code> is not supported yet.</p></blockquote><h3id="thread-i-specify-the-sampling-interval"tabindex="-1"><aclass="header-anchor"href="#thread-i-specify-the-sampling-interval"aria-hidden="true">#</a> thread -i, specify the sampling interval</h3><ul><li><p><code>thread -i 1000</code>: Count the thread cpu time of the last 1000ms.</p></li><li><p><code>thread -n 3 -i 1000</code>: List the 3 busiest thread stacks in 1000ms</p></li></ul><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code>$ thread <spanclass="token parameter variable">-n</span><spanclass="token number">3</span><spanclass="token parameter variable">-i</span><spanclass="token number">1000</span>
at sun.management.ThreadImpl.dumpThreads0<spanclass="token punctuation">(</span>Native Method<spanclass="token punctuation">)</span>
at sun.management.ThreadImpl.getThreadInfo<spanclass="token punctuation">(</span>ThreadImpl.java:440<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.command.monitor200.ThreadCommand.processTopBusyThreads<spanclass="token punctuation">(</span>ThreadCommand.java:133<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.command.monitor200.ThreadCommand.process<spanclass="token punctuation">(</span>ThreadCommand.java:79<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process<spanclass="token punctuation">(</span>AnnotatedCommandImpl.java:96<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access<spanclass="token variable">$100</span><spanclass="token punctuation">(</span>AnnotatedCommandImpl.java:27<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl<spanclass="token variable">$ProcessHandler</span>.handle<spanclass="token punctuation">(</span>AnnotatedCommandImpl.java:125<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl<spanclass="token variable">$ProcessHandler</span>.handle<spanclass="token punctuation">(</span>AnnotatedCommandImpl.java:122<spanclass="token punctuation">)</span>
at com.taobao.arthas.core.shell.system.impl.ProcessImpl<spanclass="token variable">$CommandProcessTask</span>.run<spanclass="token punctuation">(</span>ProcessImpl.java:332<spanclass="token punctuation">)</span>
at java.util.concurrent.ThreadPoolExecutor.runWorker<spanclass="token punctuation">(</span>ThreadPoolExecutor.java:1142<spanclass="token punctuation">)</span>
at java.util.concurrent.ThreadPoolExecutor<spanclass="token variable">$Worker</span>.run<spanclass="token punctuation">(</span>ThreadPoolExecutor.java:617<spanclass="token punctuation">)</span>
at java.lang.Thread.run<spanclass="token punctuation">(</span>Thread.java:756<spanclass="token punctuation">)</span>
Number of locked synchronizers <spanclass="token operator">=</span><spanclass="token number">1</span>