import{_ as l,o as i,c as r,a as s,b as a,w as p,e as n,d as c,r as o}from"./app.6c27e557.js";const u={},k=s("h1",{id:"trace",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#trace","aria-hidden":"true"},"#"),n(" trace")],-1),d={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-trace",target:"_blank",rel:"noopener noreferrer"},m=s("code",null,"trace",-1),b=n("\u5728\u7EBF\u6559\u7A0B"),v=c('
\u63D0\u793A
\u65B9\u6CD5\u5185\u90E8\u8C03\u7528\u8DEF\u5F84\uFF0C\u5E76\u8F93\u51FA\u65B9\u6CD5\u8DEF\u5F84\u4E0A\u7684\u6BCF\u4E2A\u8282\u70B9\u4E0A\u8017\u65F6
trace
\u547D\u4EE4\u80FD\u4E3B\u52A8\u641C\u7D22 class-pattern
\uFF0Fmethod-pattern
\u5BF9\u5E94\u7684\u65B9\u6CD5\u8C03\u7528\u8DEF\u5F84\uFF0C\u6E32\u67D3\u548C\u7EDF\u8BA1\u6574\u4E2A\u8C03\u7528\u94FE\u8DEF\u4E0A\u7684\u6240\u6709\u6027\u80FD\u5F00\u9500\u548C\u8FFD\u8E2A\u8C03\u7528\u94FE\u8DEF\u3002
\u53C2\u6570\u540D\u79F0 | \u53C2\u6570\u8BF4\u660E |
---|---|
class-pattern | \u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D |
method-pattern | \u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D |
condition-express | \u6761\u4EF6\u8868\u8FBE\u5F0F |
[E] | \u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D |
[n:] | \u547D\u4EE4\u6267\u884C\u6B21\u6570 |
#cost | \u65B9\u6CD5\u6267\u884C\u8017\u65F6 |
[m <arg>] | \u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF\uFF0C\u9ED8\u8BA4\u503C\u4E3A 50\u3002\u957F\u683C\u5F0F\u4E3A[maxMatch <arg>] \u3002 |
\u8FD9\u91CC\u91CD\u70B9\u8981\u8BF4\u660E\u7684\u662F\u6761\u4EF6\u8868\u8FBE\u5F0F
\uFF0C\u6761\u4EF6\u8868\u8FBE\u5F0F
\u7684\u6784\u6210\u4E3B\u8981\u7531 \bognl \u8868\u8FBE\u5F0F\u7EC4\u6210\uFF0C\u6240\u4EE5\u4F60\u53EF\u4EE5\u8FD9\u6837\u5199"params[0]<0"
\uFF0C\u53EA\u8981\u662F\u4E00\u4E2A\u5408\u6CD5\u7684 ognl \u8868\u8FBE\u5F0F\uFF0C\u90FD\u80FD\u88AB\u6B63\u5E38\u652F\u6301\u3002
$ trace demo.MathGame run
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 28 ms.
\`---ts=2019-12-04 00:45:08;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
\`---[0.617465ms] demo.MathGame:run()
\`---[0.078946ms] demo.MathGame:primeFactors() #24 [throws Exception]
\`---ts=2019-12-04 00:45:09;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
\`---[1.276874ms] demo.MathGame:run()
\`---[0.03752ms] demo.MathGame:primeFactors() #24 [throws Exception]
\u63D0\u793A
\u7ED3\u679C\u91CC\u7684 #24
\uFF0C\u8868\u793A\u5728 run \u51FD\u6570\u91CC\uFF0C\u5728\u6E90\u6587\u4EF6\u7684\u7B2C24
\u884C\u8C03\u7528\u4E86primeFactors()
\u51FD\u6570\u3002
$ trace demo.MathGame run -m 1
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 412 ms, listenerId: 4
\`---ts=2022-12-25 21:00:00;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@b4aac2
\`---[0.762093ms] demo.MathGame:run()
\`---[30.21% 0.230241ms] demo.MathGame:primeFactors() #46 [throws Exception]
\`---ts=2022-12-25 21:00:10;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@b4aac2
\`---[0.315298ms] demo.MathGame:run()
\`---[13.95% 0.043995ms] demo.MathGame:primeFactors() #46 [throws Exception]
\u5982\u679C\u65B9\u6CD5\u8C03\u7528\u7684\u6B21\u6570\u5F88\u591A\uFF0C\u90A3\u4E48\u53EF\u4EE5\u7528-n
\u53C2\u6570\u6307\u5B9A\u6355\u6349\u7ED3\u679C\u7684\u6B21\u6570\u3002\u6BD4\u5982\u4E0B\u9762\u7684\u4F8B\u5B50\u91CC\uFF0C\u6355\u6349\u5230\u4E00\u6B21\u8C03\u7528\u5C31\u9000\u51FA\u547D\u4EE4\u3002
$ trace demo.MathGame run -n 1
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 20 ms.
\`---ts=2019-12-04 00:45:53;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
\`---[0.549379ms] demo.MathGame:run()
+---[0.059839ms] demo.MathGame:primeFactors() #24
\`---[0.232887ms] demo.MathGame:print() #25
Command execution times exceed limit: 1, so command will exit. You can set it with -n option.
--skipJDKMethod <value>
skip jdk method trace, default value true.\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0Ctrace \u4E0D\u4F1A\u5305\u542B jdk \u91CC\u7684\u51FD\u6570\u8C03\u7528\uFF0C\u5982\u679C\u5E0C\u671B trace jdk \u91CC\u7684\u51FD\u6570\uFF0C\u9700\u8981\u663E\u5F0F\u8BBE\u7F6E--skipJDKMethod false
\u3002
$ trace --skipJDKMethod false demo.MathGame run
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 60 ms.
\`---ts=2019-12-04 00:44:41;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
\`---[1.357742ms] demo.MathGame:run()
+---[0.028624ms] java.util.Random:nextInt() #23
+---[0.045534ms] demo.MathGame:primeFactors() #24 [throws Exception]
+---[0.005372ms] java.lang.StringBuilder:<init>() #28
+---[0.012257ms] java.lang.Integer:valueOf() #28
+---[0.234537ms] java.lang.String:format() #28
+---[min=0.004539ms,max=0.005778ms,total=0.010317ms,count=2] java.lang.StringBuilder:append() #28
+---[0.013777ms] java.lang.Exception:getMessage() #28
+---[0.004935ms] java.lang.StringBuilder:toString() #28
\`---[0.06941ms] java.io.PrintStream:println() #28
\`---ts=2019-12-04 00:44:42;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
\`---[3.030432ms] demo.MathGame:run()
+---[0.010473ms] java.util.Random:nextInt() #23
+---[0.023715ms] demo.MathGame:primeFactors() #24 [throws Exception]
+---[0.005198ms] java.lang.StringBuilder:<init>() #28
+---[0.006405ms] java.lang.Integer:valueOf() #28
+---[0.178583ms] java.lang.String:format() #28
+---[min=0.011636ms,max=0.838077ms,total=0.849713ms,count=2] java.lang.StringBuilder:append() #28
+---[0.008747ms] java.lang.Exception:getMessage() #28
+---[0.019768ms] java.lang.StringBuilder:toString() #28
\`---[0.076457ms] java.io.PrintStream:println() #28
$ trace demo.MathGame run '#cost > 10'
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 41 ms.
\`---ts=2018-12-04 01:12:02;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
\`---[12.033735ms] demo.MathGame:run()
+---[0.006783ms] java.util.Random:nextInt()
+---[11.852594ms] demo.MathGame:primeFactors()
\`---[0.05447ms] demo.MathGame:print()
\u63D0\u793A
\u53EA\u4F1A\u5C55\u793A\u8017\u65F6\u5927\u4E8E 10ms \u7684\u8C03\u7528\u8DEF\u5F84\uFF0C\u6709\u52A9\u4E8E\u5728\u6392\u67E5\u95EE\u9898\u7684\u65F6\u5019\uFF0C\u53EA\u5173\u6CE8\u5F02\u5E38\u60C5\u51B5
trace
\u5728\u6267\u884C\u7684\u8FC7\u7A0B\u4E2D\u672C\u8EAB\u662F\u4F1A\u6709\u4E00\u5B9A\u7684\u6027\u80FD\u5F00\u9500\uFF0C\u5728\u7EDF\u8BA1\u7684\u62A5\u544A\u4E2D\u5E76\u672A\u50CF JProfiler \u4E00\u6837\u9884\u5148\u51CF\u53BB\u5176\u81EA\u8EAB\u7684\u7EDF\u8BA1\u5F00\u9500\u3002\u6240\u4EE5\u8FD9\u7EDF\u8BA1\u51FA\u6765\u6709\u4E9B\u8BB8\u7684\u4E0D\u51C6\uFF0C\u6E32\u67D3\u8DEF\u5F84\u4E0A\u8C03\u7528\u7684\u7C7B\u3001\u65B9\u6CD5\u8D8A\u591A\uFF0C\u6027\u80FD\u504F\u5DEE\u8D8A\u5927\u3002\u4F46\u8FD8\u662F\u80FD\u8BA9\u4F60\u770B\u6E05\u4E00\u4E9B\u4E8B\u60C5\u7684\u300212.033735
\u7684\u542B\u4E49\u662F\uFF1A\u5F53\u524D\u8282\u70B9\u5728\u5F53\u524D\u6B65\u9AA4\u7684\u8017\u65F6\uFF0C\u5355\u4F4D\u4E3A\u6BEB\u79D20,0,0ms,11
\u8868\u793A\u65B9\u6CD5\u8C03\u7528\u8017\u65F6\uFF0Cmin,max,total,count
\uFF1Bthrows Exception
\u8868\u660E\u8BE5\u65B9\u6CD5\u8C03\u7528\u4E2D\u5B58\u5728\u5F02\u5E38\u8FD4\u56DEtrace \u547D\u4EE4\u53EA\u4F1A trace \u5339\u914D\u5230\u7684\u51FD\u6570\u91CC\u7684\u5B50\u8C03\u7528\uFF0C\u5E76\u4E0D\u4F1A\u5411\u4E0B trace \u591A\u5C42\u3002\u56E0\u4E3A trace \u662F\u4EE3\u4EF7\u6BD4\u8F83\u8D35\u7684\uFF0C\u591A\u5C42 trace \u53EF\u80FD\u4F1A\u5BFC\u81F4\u6700\u7EC8\u8981 trace \u7684\u7C7B\u548C\u51FD\u6570\u975E\u5E38\u591A\u3002
\u53EF\u4EE5\u7528\u6B63\u5219\u8868\u5339\u914D\u8DEF\u5F84\u4E0A\u7684\u591A\u4E2A\u7C7B\u548C\u51FD\u6570\uFF0C\u4E00\u5B9A\u7A0B\u5EA6\u4E0A\u8FBE\u5230\u591A\u5C42 trace \u7684\u6548\u679C\u3002
trace -E com.test.ClassA|org.test.ClassB method1|method2|method3
\u4F7F\u7528 --exclude-class-pattern
\u53C2\u6570\u53EF\u4EE5\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B\uFF0C\u6BD4\u5982\uFF1A
trace javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter
\u63D0\u793A
3.3.0 \u7248\u672C\u540E\u652F\u6301\u3002
\u6253\u5F00\u7EC8\u7AEF 1\uFF0Ctrace \u4E0A\u9762 demo \u91CC\u7684run
\u51FD\u6570\uFF0C\u53EF\u4EE5\u770B\u5230\u6253\u5370\u51FA listenerId: 1
\uFF1A
[arthas@59161]$ trace demo.MathGame run
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 112 ms, listenerId: 1
\`---ts=2020-07-09 16:48:11;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
\`---[1.389634ms] demo.MathGame:run()
\`---[0.123934ms] demo.MathGame:primeFactors() #24 [throws Exception]
\`---ts=2020-07-09 16:48:12;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
\`---[3.716391ms] demo.MathGame:run()
+---[3.182813ms] demo.MathGame:primeFactors() #24
\`---[0.167786ms] demo.MathGame:print() #25
\u73B0\u5728\u60F3\u8981\u6DF1\u5165\u5B50\u51FD\u6570primeFactors
\uFF0C\u53EF\u4EE5\u6253\u5F00\u4E00\u4E2A\u65B0\u7EC8\u7AEF 2\uFF0C\u4F7F\u7528telnet localhost 3658
\u8FDE\u63A5\u4E0A arthas\uFF0C\u518D trace primeFactors
\u65F6\uFF0C\u6307\u5B9AlistenerId
\u3002
[arthas@59161]$ trace demo.MathGame primeFactors --listenerId 1
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 34 ms, listenerId: 1
\u8FD9\u65F6\u7EC8\u7AEF 2 \u6253\u5370\u7684\u7ED3\u679C\uFF0C\u8BF4\u660E\u5DF2\u7ECF\u589E\u5F3A\u4E86\u4E00\u4E2A\u51FD\u6570\uFF1AAffect(class count: 1 , method count: 1)
\uFF0C\u4F46\u4E0D\u518D\u6253\u5370\u66F4\u591A\u7684\u7ED3\u679C\u3002
\u518D\u67E5\u770B\u7EC8\u7AEF 1\uFF0C\u53EF\u4EE5\u53D1\u73B0 trace \u7684\u7ED3\u679C\u589E\u52A0\u4E86\u4E00\u5C42\uFF0C\u6253\u5370\u4E86primeFactors
\u51FD\u6570\u91CC\u7684\u5185\u5BB9\uFF1A
\`---ts=2020-07-09 16:49:29;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
\`---[0.492551ms] demo.MathGame:run()
\`---[0.113929ms] demo.MathGame:primeFactors() #24 [throws Exception]
\`---[0.061462ms] demo.MathGame:primeFactors()
\`---[0.001018ms] throw:java.lang.IllegalArgumentException() #46
\`---ts=2020-07-09 16:49:30;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
\`---[0.409446ms] demo.MathGame:run()
+---[0.232606ms] demo.MathGame:primeFactors() #24
| \`---[0.1294ms] demo.MathGame:primeFactors()
\`---[0.084025ms] demo.MathGame:print() #25
\u901A\u8FC7\u6307\u5B9AlistenerId
\u7684\u65B9\u5F0F\u52A8\u6001 trace\uFF0C\u53EF\u4EE5\u4E0D\u65AD\u6DF1\u5165\u3002\u53E6\u5916 watch
/tt
/monitor
\u7B49\u547D\u4EE4\u4E5F\u652F\u6301\u7C7B\u4F3C\u7684\u529F\u80FD\u3002
\u6BD4\u5982\u4E0B\u9762\u7684\u7ED3\u679C\u91CC\uFF1A0.705196 > (0.152743 + 0.145825)
$ trace demo.MathGame run -n 1
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 66 ms, listenerId: 1
\`---ts=2021-02-08 11:27:36;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@232204a1
\`---[0.705196ms] demo.MathGame:run()
+---[0.152743ms] demo.MathGame:primeFactors() #24
\`---[0.145825ms] demo.MathGame:print() #25
\u90A3\u4E48\u5176\u5B83\u7684\u65F6\u95F4\u6D88\u8017\u5728\u54EA\u4E9B\u5730\u65B9\uFF1F
\u6CA1\u6709\u88AB trace \u5230\u7684\u51FD\u6570\u3002\u6BD4\u5982java.*
\u4E0B\u7684\u51FD\u6570\u8C03\u7528\u9ED8\u8BA4\u4F1A\u5FFD\u7565\u6389\u3002\u901A\u8FC7\u589E\u52A0--skipJDKMethod false
\u53C2\u6570\u53EF\u4EE5\u6253\u5370\u51FA\u6765\u3002
$ trace demo.MathGame run --skipJDKMethod false
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 35 ms, listenerId: 2
\`---ts=2021-02-08 11:27:48;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@232204a1
\`---[0.810591ms] demo.MathGame:run()
+---[0.034568ms] java.util.Random:nextInt() #23
+---[0.119367ms] demo.MathGame:primeFactors() #24 [throws Exception]
+---[0.017407ms] java.lang.StringBuilder:<init>() #28
+---[0.127922ms] java.lang.String:format() #57
+---[min=0.01419ms,max=0.020221ms,total=0.034411ms,count=2] java.lang.StringBuilder:append() #57
+---[0.021911ms] java.lang.Exception:getMessage() #57
+---[0.015643ms] java.lang.StringBuilder:toString() #57
\`---[0.086622ms] java.io.PrintStream:println() #57
\u975E\u51FD\u6570\u8C03\u7528\u7684\u6307\u4EE4\u6D88\u8017\u3002\u6BD4\u5982 i++
, getfield
\u7B49\u6307\u4EE4\u3002
\u5728\u4EE3\u7801\u6267\u884C\u8FC7\u7A0B\u4E2D\uFF0CJVM \u53EF\u80FD\u51FA\u73B0\u505C\u987F\uFF0C\u6BD4\u5982 GC\uFF0C\u8FDB\u5165\u540C\u6B65\u5757\u7B49\u3002
\u63D0\u793A
watch/trace/monitor/stack/tt \u547D\u4EE4\u90FD\u652F\u6301 -v
\u53C2\u6570
\u5F53\u547D\u4EE4\u6267\u884C\u4E4B\u540E\uFF0C\u6CA1\u6709\u8F93\u51FA\u7ED3\u679C\u3002\u6709\u4E24\u79CD\u53EF\u80FD\uFF1A
\u4F46\u7528\u6237\u533A\u5206\u4E0D\u51FA\u662F\u54EA\u79CD\u60C5\u51B5\u3002
\u4F7F\u7528 -v
\u9009\u9879\uFF0C\u5219\u4F1A\u6253\u5370Condition express
\u7684\u5177\u4F53\u503C\u548C\u6267\u884C\u7ED3\u679C\uFF0C\u65B9\u4FBF\u786E\u8BA4\u3002