You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
arthas/assets/thread.html.88276c74.js

113 lines
34 KiB
JavaScript

import{_ as r,o as c,c as i,a,b as s,w as l,e as n,d as e,r as p}from"./app.977e81c1.js";const d={},u=a("h1",{id:"thread",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#thread","aria-hidden":"true"},"#"),n(" thread")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-thread",target:"_blank",rel:"noopener noreferrer"},h=a("code",null,"thread",-1),v=n(" online tutorial"),b=e('<div class="custom-container tip"><p class="custom-container-title">TIP</p><p>Check the basic info and stack trace of the target thread.</p></div><h2 id="parameters" tabindex="-1"><a class="header-anchor" href="#parameters" aria-hidden="true">#</a> Parameters</h2><table><thead><tr><th style="text-align:right;">Name</th><th style="text-align:left;">Specification</th></tr></thead><tbody><tr><td style="text-align:right;"><em>id</em></td><td style="text-align:left;">thread id in JVM</td></tr><tr><td style="text-align:right;"><code>[n:]</code></td><td style="text-align:left;">the top n busiest threads with stack traces printed</td></tr><tr><td style="text-align:right;"><code>[b]</code></td><td style="text-align:left;">locate the thread blocking the others</td></tr><tr><td style="text-align:right;">[i <code>&lt;value&gt;</code>]</td><td style="text-align:left;">specify the interval to collect data to compute CPU ratios (ms)</td></tr><tr><td style="text-align:right;">[--all]</td><td style="text-align:left;">Show all matching threads</td></tr></tbody></table><h2 id="how-the-cpu-ratios-are-calculated" tabindex="-1"><a class="header-anchor" href="#how-the-cpu-ratios-are-calculated" aria-hidden="true">#</a> How the CPU ratios are calculated?</h2><p>The cpu ratios here is similar to the thread <code>%CPU</code> of the linux command <code>top -H -p &lt;pid&gt;</code>. During a sampling interval, the ratio of the incremental cpu time of each thread in the current JVM to the sampling interval time.</p><h3 id="working-principle-description" tabindex="-1"><a class="header-anchor" href="#working-principle-description" aria-hidden="true">#</a> Working principle description:</h3><ul><li>Do the first sampling, get the CPU time of all threads ( by calling <code>java.lang.management.ThreadMXBean#getThreadCpuTime()</code> and <code>sun.management.HotspotThreadMBean.getInternalThreadCpuTimes()</code> )</li><li>Sleep and wait for an interval (the default is 200ms, the interval can be specified by <code>-i</code>)</li><li>Do the second sampling, get the CPU time of all threads, compare the two sampling data, and calculate the incremental CPU time of each thread</li><li><code>Thread CPU usage ratio</code> = <code>Thread increment CPU time</code> / <code>Sampling interval time</code> * 100%</li></ul><blockquote><p>Note: this operation consumes CPU time too (<code>getThreadCpuTime</code> is time-consuming), therefore it is possible to observe Arthas&#39;s thread appears in the list. To avoid this, try to increase sample interval, for example: 5000 ms.<br></p></blockquote>',8),k=n("Another way to view the thread cpu usage of the Java process, "),g={href:"https://github.com/oldratlee/useful-scripts/blob/dev-2.x/docs/java.md#-show-busy-java-threads",target:"_blank",rel:"noopener noreferrer"},T=a("code",null,"show-busy-java-threads",-1),f=n(" can come to help."),j=e(`<h2 id="usage" tabindex="-1"><a class="header-anchor" href="#usage" aria-hidden="true">#</a> Usage</h2><h3 id="list-the-top-n-busiest-threads-with-detailed-stack-trace" tabindex="-1"><a class="header-anchor" href="#list-the-top-n-busiest-threads-with-detailed-stack-trace" aria-hidden="true">#</a> List the top n busiest threads with detailed stack trace</h3><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ thread <span class="token parameter variable">-n</span> <span class="token number">3</span>
<span class="token string">&quot;C1 CompilerThread0&quot;</span> <span class="token punctuation">[</span>Internal<span class="token punctuation">]</span> <span class="token assign-left variable">cpuUsage</span><span class="token operator">=</span><span class="token number">1.63</span>% <span class="token assign-left variable">deltaTime</span><span class="token operator">=</span>3ms <span class="token assign-left variable">time</span><span class="token operator">=</span>1170ms
<span class="token string">&quot;arthas-command-execute&quot;</span> <span class="token assign-left variable">Id</span><span class="token operator">=</span><span class="token number">23</span> <span class="token assign-left variable">cpuUsage</span><span class="token operator">=</span><span class="token number">0.11</span>% <span class="token assign-left variable">deltaTime</span><span class="token operator">=</span>0ms <span class="token assign-left variable">time</span><span class="token operator">=</span>401ms RUNNABLE
at java.management@11.0.7/sun.management.ThreadImpl.dumpThreads0<span class="token punctuation">(</span>Native Method<span class="token punctuation">)</span>
at java.management@11.0.7/sun.management.ThreadImpl.getThreadInfo<span class="token punctuation">(</span>ThreadImpl.java:466<span class="token punctuation">)</span>
at com.taobao.arthas.core.command.monitor200.ThreadCommand.processTopBusyThreads<span class="token punctuation">(</span>ThreadCommand.java:199<span class="token punctuation">)</span>
at com.taobao.arthas.core.command.monitor200.ThreadCommand.process<span class="token punctuation">(</span>ThreadCommand.java:122<span class="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process<span class="token punctuation">(</span>AnnotatedCommandImpl.java:82<span class="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access<span class="token variable">$100</span><span class="token punctuation">(</span>AnnotatedCommandImpl.java:18<span class="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl<span class="token variable">$ProcessHandler</span>.handle<span class="token punctuation">(</span>AnnotatedCommandImpl.java:111<span class="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl<span class="token variable">$ProcessHandler</span>.handle<span class="token punctuation">(</span>AnnotatedCommandImpl.java:108<span class="token punctuation">)</span>
at com.taobao.arthas.core.shell.system.impl.ProcessImpl<span class="token variable">$CommandProcessTask</span>.run<span class="token punctuation">(</span>ProcessImpl.java:385<span class="token punctuation">)</span>
at java.base@11.0.7/java.util.concurrent.Executors<span class="token variable">$RunnableAdapter</span>.call<span class="token punctuation">(</span>Executors.java:515<span class="token punctuation">)</span>
at java.base@11.0.7/java.util.concurrent.FutureTask.run<span class="token punctuation">(</span>FutureTask.java:264<span class="token punctuation">)</span>
at java.base@11.0.7/java.util.concurrent.ScheduledThreadPoolExecutor<span class="token variable">$ScheduledFutureTask</span>.run<span class="token punctuation">(</span>ScheduledThreadPoolExecutor.java:304<span class="token punctuation">)</span>
at java.base@11.0.7/java.util.concurrent.ThreadPoolExecutor.runWorker<span class="token punctuation">(</span>ThreadPoolExecutor.java:1128<span class="token punctuation">)</span>
at java.base@11.0.7/java.util.concurrent.ThreadPoolExecutor<span class="token variable">$Worker</span>.run<span class="token punctuation">(</span>ThreadPoolExecutor.java:628<span class="token punctuation">)</span>
at java.base@11.0.7/java.lang.Thread.run<span class="token punctuation">(</span>Thread.java:834<span class="token punctuation">)</span>
<span class="token string">&quot;VM Periodic Task Thread&quot;</span> <span class="token punctuation">[</span>Internal<span class="token punctuation">]</span> <span class="token assign-left variable">cpuUsage</span><span class="token operator">=</span><span class="token number">0.07</span>% <span class="token assign-left variable">deltaTime</span><span class="token operator">=</span>0ms <span class="token assign-left variable">time</span><span class="token operator">=</span>584ms
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>`,3),I=n("Without thread ID, including "),A=a("code",null,"[Internal]",-1),C=n(" means JVM internal thread, refer to the introduction of "),y=n("dashboard"),x=n(" command."),E=a("code",null,"cpuUsage",-1),_=n(" is the CPU usage of the thread during the sampling interval, consistent with the data of the "),N=n("dashboard"),P=n(" command."),w=a("li",null,[a("code",null,"deltaTime"),n(" 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.")],-1),S=a("li",null,[a("code",null,"time"),n(" The total CPU time of thread.")],-1),U=e(`<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><h3 id="list-first-page-threads-info-when-no-options-provided" tabindex="-1"><a class="header-anchor" href="#list-first-page-threads-info-when-no-options-provided" aria-hidden="true">#</a> List first page threads&#39; 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><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ thread
Threads Total: <span class="token number">33</span>, NEW: <span class="token number">0</span>, RUNNABLE: <span class="token number">9</span>, BLOCKED: <span class="token number">0</span>, WAITING: <span class="token number">3</span>, TIMED_WAITING: <span class="token number">4</span>, TERMINATED: <span class="token number">0</span>, Internal threads: <span class="token number">17</span>
ID NAME GROUP PRIORITY STATE %CPU DELTA_TIME TIME INTERRUPT DAEMON
<span class="token parameter variable">-1</span> C2 CompilerThread0 - <span class="token parameter variable">-1</span> - <span class="token number">5.06</span> <span class="token number">0.010</span> <span class="token number">0</span>:0.973 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token parameter variable">-1</span> C1 CompilerThread0 - <span class="token parameter variable">-1</span> - <span class="token number">0.95</span> <span class="token number">0.001</span> <span class="token number">0</span>:0.603 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">23</span> arthas-command-execute system <span class="token number">5</span> RUNNABLE <span class="token number">0.17</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.226 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token parameter variable">-1</span> VM Periodic Task Thread - <span class="token parameter variable">-1</span> - <span class="token number">0.05</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.094 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token parameter variable">-1</span> Sweeper thread - <span class="token parameter variable">-1</span> - <span class="token number">0.04</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.011 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token parameter variable">-1</span> G1 Young RemSet Sampling - <span class="token parameter variable">-1</span> - <span class="token number">0.02</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.025 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">12</span> Attach Listener system <span class="token number">9</span> RUNNABLE <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.022 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">11</span> Common-Cleaner InnocuousThrea <span class="token number">8</span> TIMED_WAI <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.000 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">3</span> Finalizer system <span class="token number">8</span> WAITING <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.000 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">2</span> Reference Handler system <span class="token number">10</span> RUNNABLE <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.000 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">4</span> Signal Dispatcher system <span class="token number">9</span> RUNNABLE <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.000 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">15</span> arthas-NettyHttpTelnetBootstra system <span class="token number">5</span> RUNNABLE <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.029 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">22</span> arthas-NettyHttpTelnetBootstra system <span class="token number">5</span> RUNNABLE <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.196 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">24</span> arthas-NettyHttpTelnetBootstra system <span class="token number">5</span> RUNNABLE <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.038 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">16</span> arthas-NettyWebsocketTtyBootst system <span class="token number">5</span> RUNNABLE <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.001 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">17</span> arthas-NettyWebsocketTtyBootst system <span class="token number">5</span> RUNNABLE <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.001 <span class="token boolean">false</span> <span class="token boolean">true</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="thread-all-show-all-matching-threads" tabindex="-1"><a class="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><h3 id="thread-id-show-the-running-stack-for-the-target-thread" tabindex="-1"><a class="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><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ thread <span class="token number">1</span>
<span class="token string">&quot;main&quot;</span> <span class="token assign-left variable">Id</span><span class="token operator">=</span><span class="token number">1</span> WAITING on java.util.concurrent.CountDownLatch<span class="token variable">$Sync</span>@29fafb28
at sun.misc.Unsafe.park<span class="token punctuation">(</span>Native Method<span class="token punctuation">)</span>
- waiting on java.util.concurrent.CountDownLatch<span class="token variable">$Sync</span>@29fafb28
at java.util.concurrent.locks.LockSupport.park<span class="token punctuation">(</span>LockSupport.java:175<span class="token punctuation">)</span>
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt<span class="token punctuation">(</span>AbstractQueuedSynchronizer.java:836<span class="token punctuation">)</span>
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly<span class="token punctuation">(</span>AbstractQueuedSynchronizer.java:997<span class="token punctuation">)</span>
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly<span class="token punctuation">(</span>AbstractQueuedSynchronizer.java:1304<span class="token punctuation">)</span>
at java.util.concurrent.CountDownLatch.await<span class="token punctuation">(</span>CountDownLatch.java:231<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="thread-b-locate-the-thread-bocking-the-others" tabindex="-1"><a class="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&#39;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><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ thread <span class="token parameter variable">-b</span>
<span class="token string">&quot;http-bio-8080-exec-4&quot;</span> <span class="token assign-left variable">Id</span><span class="token operator">=</span><span class="token number">27</span> TIMED_WAITING
at java.lang.Thread.sleep<span class="token punctuation">(</span>Native Method<span class="token punctuation">)</span>
at test.arthas.TestThreadBlocking.doGet<span class="token punctuation">(</span>TestThreadBlocking.java:22<span class="token punctuation">)</span>
- locked java.lang.Object@725be470 <span class="token operator">&lt;</span>---- but blocks <span class="token number">4</span> other threads<span class="token operator">!</span>
at javax.servlet.http.HttpServlet.service<span class="token punctuation">(</span>HttpServlet.java:624<span class="token punctuation">)</span>
at javax.servlet.http.HttpServlet.service<span class="token punctuation">(</span>HttpServlet.java:731<span class="token punctuation">)</span>
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter<span class="token punctuation">(</span>ApplicationFilterChain.java:303<span class="token punctuation">)</span>
at org.apache.catalina.core.ApplicationFilterChain.doFilter<span class="token punctuation">(</span>ApplicationFilterChain.java:208<span class="token punctuation">)</span>
at org.apache.tomcat.websocket.server.WsFilter.doFilter<span class="token punctuation">(</span>WsFilter.java:52<span class="token punctuation">)</span>
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter<span class="token punctuation">(</span>ApplicationFilterChain.java:241<span class="token punctuation">)</span>
at org.apache.catalina.core.ApplicationFilterChain.doFilter<span class="token punctuation">(</span>ApplicationFilterChain.java:208<span class="token punctuation">)</span>
at test.filter.TestDurexFilter.doFilter<span class="token punctuation">(</span>TestDurexFilter.java:46<span class="token punctuation">)</span>
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter<span class="token punctuation">(</span>ApplicationFilterChain.java:241<span class="token punctuation">)</span>
at org.apache.catalina.core.ApplicationFilterChain.doFilter<span class="token punctuation">(</span>ApplicationFilterChain.java:208<span class="token punctuation">)</span>
at org.apache.catalina.core.StandardWrapperValve.invoke<span class="token punctuation">(</span>StandardWrapperValve.java:220<span class="token punctuation">)</span>
at org.apache.catalina.core.StandardContextValve.invoke<span class="token punctuation">(</span>StandardContextValve.java:122<span class="token punctuation">)</span>
at org.apache.catalina.authenticator.AuthenticatorBase.invoke<span class="token punctuation">(</span>AuthenticatorBase.java:505<span class="token punctuation">)</span>
at com.taobao.tomcat.valves.ContextLoadFilterValve<span class="token variable">$FilterChainAdapter</span>.doFilter<span class="token punctuation">(</span>ContextLoadFilterValve.java:191<span class="token punctuation">)</span>
at com.taobao.eagleeye.EagleEyeFilter.doFilter<span class="token punctuation">(</span>EagleEyeFilter.java:81<span class="token punctuation">)</span>
at com.taobao.tomcat.valves.ContextLoadFilterValve.invoke<span class="token punctuation">(</span>ContextLoadFilterValve.java:150<span class="token punctuation">)</span>
at org.apache.catalina.core.StandardHostValve.invoke<span class="token punctuation">(</span>StandardHostValve.java:170<span class="token punctuation">)</span>
at org.apache.catalina.valves.ErrorReportValve.invoke<span class="token punctuation">(</span>ErrorReportValve.java:103<span class="token punctuation">)</span>
at org.apache.catalina.core.StandardEngineValve.invoke<span class="token punctuation">(</span>StandardEngineValve.java:116<span class="token punctuation">)</span>
at org.apache.catalina.connector.CoyoteAdapter.service<span class="token punctuation">(</span>CoyoteAdapter.java:429<span class="token punctuation">)</span>
at org.apache.coyote.http11.AbstractHttp11Processor.process<span class="token punctuation">(</span>AbstractHttp11Processor.java:1085<span class="token punctuation">)</span>
at org.apache.coyote.AbstractProtocol<span class="token variable">$AbstractConnectionHandler</span>.process<span class="token punctuation">(</span>AbstractProtocol.java:625<span class="token punctuation">)</span>
at org.apache.tomcat.util.net.JIoEndpoint<span class="token variable">$SocketProcessor</span>.run<span class="token punctuation">(</span>JIoEndpoint.java:318<span class="token punctuation">)</span>
- locked org.apache.tomcat.util.net.SocketWrapper@7127ee12
at java.util.concurrent.ThreadPoolExecutor.runWorker<span class="token punctuation">(</span>ThreadPoolExecutor.java:1142<span class="token punctuation">)</span>
at java.util.concurrent.ThreadPoolExecutor<span class="token variable">$Worker</span>.run<span class="token punctuation">(</span>ThreadPoolExecutor.java:617<span class="token punctuation">)</span>
at org.apache.tomcat.util.threads.TaskThread<span class="token variable">$WrappingRunnable</span>.run<span class="token punctuation">(</span>TaskThread.java:61<span class="token punctuation">)</span>
at java.lang.Thread.run<span class="token punctuation">(</span>Thread.java:745<span class="token punctuation">)</span>
Number of locked synchronizers <span class="token operator">=</span> <span class="token number">1</span>
- java.util.concurrent.ThreadPoolExecutor<span class="token variable">$Worker</span>@31a6493e
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="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><h3 id="thread-i-specify-the-sampling-interval" tabindex="-1"><a class="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><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ thread <span class="token parameter variable">-n</span> <span class="token number">3</span> <span class="token parameter variable">-i</span> <span class="token number">1000</span>
<span class="token string">&quot;as-command-execute-daemon&quot;</span> <span class="token assign-left variable">Id</span><span class="token operator">=</span><span class="token number">4759</span> <span class="token assign-left variable">cpuUsage</span><span class="token operator">=</span><span class="token number">23</span>% RUNNABLE
at sun.management.ThreadImpl.dumpThreads0<span class="token punctuation">(</span>Native Method<span class="token punctuation">)</span>
at sun.management.ThreadImpl.getThreadInfo<span class="token punctuation">(</span>ThreadImpl.java:440<span class="token punctuation">)</span>
at com.taobao.arthas.core.command.monitor200.ThreadCommand.processTopBusyThreads<span class="token punctuation">(</span>ThreadCommand.java:133<span class="token punctuation">)</span>
at com.taobao.arthas.core.command.monitor200.ThreadCommand.process<span class="token punctuation">(</span>ThreadCommand.java:79<span class="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process<span class="token punctuation">(</span>AnnotatedCommandImpl.java:96<span class="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access<span class="token variable">$100</span><span class="token punctuation">(</span>AnnotatedCommandImpl.java:27<span class="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl<span class="token variable">$ProcessHandler</span>.handle<span class="token punctuation">(</span>AnnotatedCommandImpl.java:125<span class="token punctuation">)</span>
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl<span class="token variable">$ProcessHandler</span>.handle<span class="token punctuation">(</span>AnnotatedCommandImpl.java:122<span class="token punctuation">)</span>
at com.taobao.arthas.core.shell.system.impl.ProcessImpl<span class="token variable">$CommandProcessTask</span>.run<span class="token punctuation">(</span>ProcessImpl.java:332<span class="token punctuation">)</span>
at java.util.concurrent.ThreadPoolExecutor.runWorker<span class="token punctuation">(</span>ThreadPoolExecutor.java:1142<span class="token punctuation">)</span>
at java.util.concurrent.ThreadPoolExecutor<span class="token variable">$Worker</span>.run<span class="token punctuation">(</span>ThreadPoolExecutor.java:617<span class="token punctuation">)</span>
at java.lang.Thread.run<span class="token punctuation">(</span>Thread.java:756<span class="token punctuation">)</span>
Number of locked synchronizers <span class="token operator">=</span> <span class="token number">1</span>
- java.util.concurrent.ThreadPoolExecutor<span class="token variable">$Worker</span>@546aeec1
<span class="token punctuation">..</span>.
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="thread-state-view-the-special-state-theads" tabindex="-1"><a class="header-anchor" href="#thread-state-view-the-special-state-theads" aria-hidden="true">#</a> thread --state , view the special state theads</h3><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code><span class="token punctuation">[</span>arthas@28114<span class="token punctuation">]</span>$ thread <span class="token parameter variable">--state</span> WAITING
Threads Total: <span class="token number">16</span>, NEW: <span class="token number">0</span>, RUNNABLE: <span class="token number">9</span>, BLOCKED: <span class="token number">0</span>, WAITING: <span class="token number">3</span>, TIMED_WAITING: <span class="token number">4</span>, TERMINATED: <span class="token number">0</span>
ID NAME GROUP PRIORITY STATE %CPU DELTA_TIME TIME INTERRUPTE DAEMON
<span class="token number">3</span> Finalizer system <span class="token number">8</span> WAITING <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.000 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">20</span> arthas-UserStat system <span class="token number">9</span> WAITING <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.001 <span class="token boolean">false</span> <span class="token boolean">true</span>
<span class="token number">14</span> arthas-timer system <span class="token number">9</span> WAITING <span class="token number">0.0</span> <span class="token number">0.000</span> <span class="token number">0</span>:0.000 <span class="token boolean">false</span> <span class="token boolean">true</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>`,18);function F(L,B){const t=p("ExternalLinkIcon"),o=p("RouterLink");return c(),i("div",null,[u,a("p",null,[a("a",m,[h,v,s(t)])]),b,a("blockquote",null,[a("p",null,[k,a("a",g,[T,s(t)]),f])]),j,a("ul",null,[a("li",null,[I,A,C,s(o,{to:"/en/doc/dashboard.html"},{default:l(()=>[y]),_:1}),x]),a("li",null,[E,_,s(o,{to:"/en/doc/dashboard.html"},{default:l(()=>[N]),_:1}),P]),w,S]),U])}const W=r(d,[["render",F],["__file","thread.html.vue"]]);export{W as default};