import{_ as c,o as r,c as i,a,b as s,w as l,e as n,d as e,r as p}from"./app.977e81c1.js";const u={},d=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=cn&id=command-thread",target:"_blank",rel:"noopener noreferrer"},v=a("code",null,"thread",-1),b=n("\u5728\u7EBF\u6559\u7A0B"),k=e('

\u63D0\u793A

\u67E5\u770B\u5F53\u524D\u7EBF\u7A0B\u4FE1\u606F\uFF0C\u67E5\u770B\u7EBF\u7A0B\u7684\u5806\u6808

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
id\u7EBF\u7A0B id
[n:]\u6307\u5B9A\u6700\u5FD9\u7684\u524D N \u4E2A\u7EBF\u7A0B\u5E76\u6253\u5370\u5806\u6808
[b]\u627E\u51FA\u5F53\u524D\u963B\u585E\u5176\u4ED6\u7EBF\u7A0B\u7684\u7EBF\u7A0B
[i <value>]\u6307\u5B9A cpu \u4F7F\u7528\u7387\u7EDF\u8BA1\u7684\u91C7\u6837\u95F4\u9694\uFF0C\u5355\u4F4D\u4E3A\u6BEB\u79D2\uFF0C\u9ED8\u8BA4\u503C\u4E3A 200
[--all]\u663E\u793A\u6240\u6709\u5339\u914D\u7684\u7EBF\u7A0B

cpu \u4F7F\u7528\u7387\u662F\u5982\u4F55\u7EDF\u8BA1\u51FA\u6765\u7684\uFF1F

\u8FD9\u91CC\u7684 cpu \u4F7F\u7528\u7387\u4E0E linux \u547D\u4EE4top -H -p <pid> \u7684\u7EBF\u7A0B%CPU\u7C7B\u4F3C\uFF0C\u4E00\u6BB5\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u5185\uFF0C\u5F53\u524D JVM \u91CC\u5404\u4E2A\u7EBF\u7A0B\u7684\u589E\u91CF cpu \u65F6\u95F4\u4E0E\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u7684\u6BD4\u4F8B\u3002

\u5DE5\u4F5C\u539F\u7406\u8BF4\u660E\uFF1A

\u6CE8\u610F

\u6CE8\u610F\uFF1A \u8FD9\u4E2A\u7EDF\u8BA1\u4E5F\u4F1A\u4EA7\u751F\u4E00\u5B9A\u7684\u5F00\u9500\uFF08JDK \u8FD9\u4E2A\u63A5\u53E3\u672C\u8EAB\u5F00\u9500\u6BD4\u8F83\u5927\uFF09\uFF0C\u56E0\u6B64\u4F1A\u770B\u5230 as \u7684\u7EBF\u7A0B\u5360\u7528\u4E00\u5B9A\u7684\u767E\u5206\u6BD4\uFF0C\u4E3A\u4E86\u964D\u4F4E\u7EDF\u8BA1\u81EA\u8EAB\u7684\u5F00\u9500\u5E26\u6765\u7684\u5F71\u54CD\uFF0C\u53EF\u4EE5\u628A\u91C7\u6837\u95F4\u9694\u62C9\u957F\u4E00\u4E9B\uFF0C\u6BD4\u5982 5000 \u6BEB\u79D2\u3002

',8),h={class:"custom-container tip"},g=a("p",{class:"custom-container-title"},"\u63D0\u793A",-1),T=n("\u53E6\u5916\u4E00\u79CD\u67E5\u770B Java \u8FDB\u7A0B\u7684\u7EBF\u7A0B cpu \u4F7F\u7528\u7387\u65B9\u6CD5\uFF1A\u53EF\u4EE5\u4F7F\u7528"),j={href:"https://github.com/oldratlee/useful-scripts/blob/dev-2.x/docs/java.md#-show-busy-java-threads",target:"_blank",rel:"noopener noreferrer"},I=a("code",null,"show-busy-java-threads",-1),A=n("\u8FD9\u4E2A\u811A\u672C\u3002"),C=e(`

\u4F7F\u7528\u53C2\u8003

\u652F\u6301\u4E00\u952E\u5C55\u793A\u5F53\u524D\u6700\u5FD9\u7684\u524D N \u4E2A\u7EBF\u7A0B\u5E76\u6253\u5370\u5806\u6808\uFF1A

$ thread -n 3
"C1 CompilerThread0" [Internal] cpuUsage=1.63% deltaTime=3ms time=1170ms


"arthas-command-execute" Id=23 cpuUsage=0.11% deltaTime=0ms time=401ms RUNNABLE
    at java.management@11.0.7/sun.management.ThreadImpl.dumpThreads0(Native Method)
    at java.management@11.0.7/sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:466)
    at com.taobao.arthas.core.command.monitor200.ThreadCommand.processTopBusyThreads(ThreadCommand.java:199)
    at com.taobao.arthas.core.command.monitor200.ThreadCommand.process(ThreadCommand.java:122)
    at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process(AnnotatedCommandImpl.java:82)
    at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access$100(AnnotatedCommandImpl.java:18)
    at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:111)
    at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:108)
    at com.taobao.arthas.core.shell.system.impl.ProcessImpl$CommandProcessTask.run(ProcessImpl.java:385)
    at java.base@11.0.7/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base@11.0.7/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base@11.0.7/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
    at java.base@11.0.7/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base@11.0.7/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base@11.0.7/java.lang.Thread.run(Thread.java:834)


"VM Periodic Task Thread" [Internal] cpuUsage=0.07% deltaTime=0ms time=584ms
`,3),f=n("\u6CA1\u6709\u7EBF\u7A0B ID\uFF0C\u5305\u542B"),_=a("code",null,"[Internal]",-1),x=n("\u8868\u793A\u4E3A JVM \u5185\u90E8\u7EBF\u7A0B\uFF0C\u53C2\u8003"),E=n("dashboard"),N=n("\u547D\u4EE4\u7684\u4ECB\u7ECD\u3002"),y=a("code",null,"cpuUsage",-1),P=n("\u4E3A\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u5185\u7EBF\u7A0B\u7684 CPU \u4F7F\u7528\u7387\uFF0C\u4E0E"),F=n("dashboard"),S=n("\u547D\u4EE4\u7684\u6570\u636E\u4E00\u81F4\u3002"),U=a("li",null,[a("code",null,"deltaTime"),n("\u4E3A\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u5185\u7EBF\u7A0B\u7684\u589E\u91CF CPU \u65F6\u95F4\uFF0C\u5C0F\u4E8E 1ms \u65F6\u88AB\u53D6\u6574\u663E\u793A\u4E3A 0ms\u3002")],-1),L=a("li",null,[a("code",null,"time"),n(" \u7EBF\u7A0B\u8FD0\u884C\u603B CPU \u65F6\u95F4\u3002")],-1),R=e(`

\u6CE8\u610F\uFF1A\u7EBF\u7A0B\u6808\u4E3A\u7B2C\u4E8C\u91C7\u6837\u7ED3\u675F\u65F6\u83B7\u53D6\uFF0C\u4E0D\u80FD\u8868\u660E\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u5185\u8BE5\u7EBF\u7A0B\u90FD\u662F\u5728\u5904\u7406\u76F8\u540C\u7684\u4EFB\u52A1\u3002\u5EFA\u8BAE\u95F4\u9694\u65F6\u95F4\u4E0D\u8981\u592A\u957F\uFF0C\u53EF\u80FD\u95F4\u9694\u65F6\u95F4\u8D8A\u5927\u8D8A\u4E0D\u51C6\u786E\u3002 \u53EF\u4EE5\u6839\u636E\u5177\u4F53\u60C5\u51B5\u5C1D\u8BD5\u6307\u5B9A\u4E0D\u540C\u7684\u95F4\u9694\u65F6\u95F4\uFF0C\u89C2\u5BDF\u8F93\u51FA\u7ED3\u679C\u3002

\u5F53\u6CA1\u6709\u53C2\u6570\u65F6\uFF0C\u663E\u793A\u7B2C\u4E00\u9875\u7EBF\u7A0B\u7684\u4FE1\u606F

\u9ED8\u8BA4\u6309\u7167 CPU \u589E\u91CF\u65F6\u95F4\u964D\u5E8F\u6392\u5217\uFF0C\u53EA\u663E\u793A\u7B2C\u4E00\u9875\u6570\u636E\u3002

$ thread
Threads Total: 33, NEW: 0, RUNNABLE: 9, BLOCKED: 0, WAITING: 3, TIMED_WAITING: 4, TERMINATED: 0, Internal threads: 17
ID   NAME                           GROUP          PRIORITY  STATE     %CPU      DELTA_TIME TIME      INTERRUPT DAEMON
-1   C2 CompilerThread0             -              -1        -         5.06      0.010      0:0.973   false     true
-1   C1 CompilerThread0             -              -1        -         0.95      0.001      0:0.603   false     true
23   arthas-command-execute         system         5         RUNNABLE  0.17      0.000      0:0.226   false     true
-1   VM Periodic Task Thread        -              -1        -         0.05      0.000      0:0.094   false     true
-1   Sweeper thread                 -              -1        -         0.04      0.000      0:0.011   false     true
-1   G1 Young RemSet Sampling       -              -1        -         0.02      0.000      0:0.025   false     true
12   Attach Listener                system         9         RUNNABLE  0.0       0.000      0:0.022   false     true
11   Common-Cleaner                 InnocuousThrea 8         TIMED_WAI 0.0       0.000      0:0.000   false     true
3    Finalizer                      system         8         WAITING   0.0       0.000      0:0.000   false     true
2    Reference Handler              system         10        RUNNABLE  0.0       0.000      0:0.000   false     true
4    Signal Dispatcher              system         9         RUNNABLE  0.0       0.000      0:0.000   false     true
15   arthas-NettyHttpTelnetBootstra system         5         RUNNABLE  0.0       0.000      0:0.029   false     true
22   arthas-NettyHttpTelnetBootstra system         5         RUNNABLE  0.0       0.000      0:0.196   false     true
24   arthas-NettyHttpTelnetBootstra system         5         RUNNABLE  0.0       0.000      0:0.038   false     true
16   arthas-NettyWebsocketTtyBootst system         5         RUNNABLE  0.0       0.000      0:0.001   false     true
17   arthas-NettyWebsocketTtyBootst system         5         RUNNABLE  0.0       0.000      0:0.001   false     true

thread --all, \u663E\u793A\u6240\u6709\u5339\u914D\u7684\u7EBF\u7A0B

\u663E\u793A\u6240\u6709\u5339\u914D\u7EBF\u7A0B\u4FE1\u606F\uFF0C\u6709\u65F6\u9700\u8981\u83B7\u53D6\u5168\u90E8 JVM \u7684\u7EBF\u7A0B\u6570\u636E\u8FDB\u884C\u5206\u6790\u3002

thread id, \u663E\u793A\u6307\u5B9A\u7EBF\u7A0B\u7684\u8FD0\u884C\u5806\u6808

$ thread 1
"main" Id=1 WAITING on java.util.concurrent.CountDownLatch$Sync@29fafb28
    at sun.misc.Unsafe.park(Native Method)
    -  waiting on java.util.concurrent.CountDownLatch$Sync@29fafb28
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
    at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)

thread -b, \u627E\u51FA\u5F53\u524D\u963B\u585E\u5176\u4ED6\u7EBF\u7A0B\u7684\u7EBF\u7A0B

\u6709\u65F6\u5019\u6211\u4EEC\u53D1\u73B0\u5E94\u7528\u5361\u4F4F\u4E86\uFF0C \u901A\u5E38\u662F\u7531\u4E8E\u67D0\u4E2A\u7EBF\u7A0B\u62FF\u4F4F\u4E86\u67D0\u4E2A\u9501\uFF0C \u5E76\u4E14\u5176\u4ED6\u7EBF\u7A0B\u90FD\u5728\u7B49\u5F85\u8FD9\u628A\u9501\u9020\u6210\u7684\u3002 \u4E3A\u4E86\u6392\u67E5\u8FD9\u7C7B\u95EE\u9898\uFF0C arthas \u63D0\u4F9B\u4E86thread -b\uFF0C \u4E00\u952E\u627E\u51FA\u90A3\u4E2A\u7F6A\u9B41\u7978\u9996\u3002

$ thread -b
"http-bio-8080-exec-4" Id=27 TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at test.arthas.TestThreadBlocking.doGet(TestThreadBlocking.java:22)
    -  locked java.lang.Object@725be470 <---- but blocks 4 other threads!
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at test.filter.TestDurexFilter.doFilter(TestDurexFilter.java:46)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at com.taobao.tomcat.valves.ContextLoadFilterValve$FilterChainAdapter.doFilter(ContextLoadFilterValve.java:191)
    at com.taobao.eagleeye.EagleEyeFilter.doFilter(EagleEyeFilter.java:81)
    at com.taobao.tomcat.valves.ContextLoadFilterValve.invoke(ContextLoadFilterValve.java:150)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:429)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    -  locked org.apache.tomcat.util.net.SocketWrapper@7127ee12
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

    Number of locked synchronizers = 1
    - java.util.concurrent.ThreadPoolExecutor$Worker@31a6493e

\u6CE8\u610F

\u6CE8\u610F\uFF0C \u76EE\u524D\u53EA\u652F\u6301\u627E\u51FA synchronized \u5173\u952E\u5B57\u963B\u585E\u4F4F\u7684\u7EBF\u7A0B\uFF0C \u5982\u679C\u662Fjava.util.concurrent.Lock\uFF0C \u76EE\u524D\u8FD8\u4E0D\u652F\u6301\u3002

thread -i, \u6307\u5B9A\u91C7\u6837\u65F6\u95F4\u95F4\u9694

$ thread -n 3 -i 1000
"as-command-execute-daemon" Id=4759 cpuUsage=23% RUNNABLE
    at sun.management.ThreadImpl.dumpThreads0(Native Method)
    at sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:440)
    at com.taobao.arthas.core.command.monitor200.ThreadCommand.processTopBusyThreads(ThreadCommand.java:133)
    at com.taobao.arthas.core.command.monitor200.ThreadCommand.process(ThreadCommand.java:79)
    at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process(AnnotatedCommandImpl.java:96)
    at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access$100(AnnotatedCommandImpl.java:27)
    at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:125)
    at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:122)
    at com.taobao.arthas.core.shell.system.impl.ProcessImpl$CommandProcessTask.run(ProcessImpl.java:332)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:756)

    Number of locked synchronizers = 1
    - java.util.concurrent.ThreadPoolExecutor$Worker@546aeec1
...

thread --state \uFF0C\u67E5\u770B\u6307\u5B9A\u72B6\u6001\u7684\u7EBF\u7A0B

[arthas@28114]$ thread --state WAITING
Threads Total: 16, NEW: 0, RUNNABLE: 9, BLOCKED: 0, WAITING: 3, TIMED_WAITING: 4, TERMINATED: 0
ID   NAME                           GROUP           PRIORITY   STATE     %CPU      DELTA_TIME TIME      INTERRUPTE DAEMON
3    Finalizer                      system          8          WAITING   0.0       0.000      0:0.000   false      true
20   arthas-UserStat                system          9          WAITING   0.0       0.000      0:0.001   false      true
14   arthas-timer                   system          9          WAITING   0.0       0.000      0:0.000   false      true
`,17);function B(W,$){const t=p("ExternalLinkIcon"),o=p("RouterLink");return r(),i("div",null,[d,a("p",null,[a("a",m,[v,b,s(t)])]),k,a("div",h,[g,a("p",null,[T,a("a",j,[I,s(t)]),A])]),C,a("ul",null,[a("li",null,[f,_,x,s(o,{to:"/doc/dashboard.html"},{default:l(()=>[E]),_:1}),N]),a("li",null,[y,P,s(o,{to:"/doc/dashboard.html"},{default:l(()=>[F]),_:1}),S]),U,L]),R])}const M=c(u,[["render",B],["__file","thread.html.vue"]]);export{M as default};