import{_ as c,o as i,c as r,a as s,b as a,w as o,e as n,d as e,r as l}from"./app.391b0e4e.js";const u={},d=s("h1",{id:"watch",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#watch","aria-hidden":"true"},"#"),n(" watch")],-1),k={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-watch",target:"_blank",rel:"noopener noreferrer"},m=s("code",null,"watch",-1),v=n("\u5728\u7EBF\u6559\u7A0B"),b=e('
\u63D0\u793A
\u51FD\u6570\u6267\u884C\u6570\u636E\u89C2\u6D4B
\u8BA9\u4F60\u80FD\u65B9\u4FBF\u7684\u89C2\u5BDF\u5230\u6307\u5B9A\u51FD\u6570\u7684\u8C03\u7528\u60C5\u51B5\u3002\u80FD\u89C2\u5BDF\u5230\u7684\u8303\u56F4\u4E3A\uFF1A\u8FD4\u56DE\u503C
\u3001\u629B\u51FA\u5F02\u5E38
\u3001\u5165\u53C2
\uFF0C\u901A\u8FC7\u7F16\u5199 OGNL \u8868\u8FBE\u5F0F\u8FDB\u884C\u5BF9\u5E94\u53D8\u91CF\u7684\u67E5\u770B\u3002
watch \u7684\u53C2\u6570\u6BD4\u8F83\u591A\uFF0C\u4E3B\u8981\u662F\u56E0\u4E3A\u5B83\u80FD\u5728 4 \u4E2A\u4E0D\u540C\u7684\u573A\u666F\u89C2\u5BDF\u5BF9\u8C61
\u53C2\u6570\u540D\u79F0 | \u53C2\u6570\u8BF4\u660E |
---|---|
class-pattern | \u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D |
method-pattern | \u51FD\u6570\u540D\u8868\u8FBE\u5F0F\u5339\u914D |
express | \u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u9ED8\u8BA4\u503C\uFF1A{params, target, returnObj} |
condition-express | \u6761\u4EF6\u8868\u8FBE\u5F0F |
[b] | \u5728\u51FD\u6570\u8C03\u7528\u4E4B\u524D\u89C2\u5BDF |
[e] | \u5728\u51FD\u6570\u5F02\u5E38\u4E4B\u540E\u89C2\u5BDF |
[s] | \u5728\u51FD\u6570\u8FD4\u56DE\u4E4B\u540E\u89C2\u5BDF |
[f] | \u5728\u51FD\u6570\u7ED3\u675F\u4E4B\u540E(\u6B63\u5E38\u8FD4\u56DE\u548C\u5F02\u5E38\u8FD4\u56DE)\u89C2\u5BDF |
[E] | \u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D |
[x:] | \u6307\u5B9A\u8F93\u51FA\u7ED3\u679C\u7684\u5C5E\u6027\u904D\u5386\u6DF1\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A 1\uFF0C\u6700\u5927\u503C\u662F 4 |
\u8FD9\u91CC\u91CD\u70B9\u8981\u8BF4\u660E\u7684\u662F\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u89C2\u5BDF\u8868\u8FBE\u5F0F\u7684\u6784\u6210\u4E3B\u8981\u7531 ognl \u8868\u8FBE\u5F0F\u7EC4\u6210\uFF0C\u6240\u4EE5\u4F60\u53EF\u4EE5\u8FD9\u6837\u5199"{params,returnObj}"
\uFF0C\u53EA\u8981\u662F\u4E00\u4E2A\u5408\u6CD5\u7684 ognl \u8868\u8FBE\u5F0F\uFF0C\u90FD\u80FD\u88AB\u6B63\u5E38\u652F\u6301\u3002
\u7279\u522B\u8BF4\u660E\uFF1A
-b
\u51FD\u6570\u8C03\u7528\u524D\uFF0C-e
\u51FD\u6570\u5F02\u5E38\u540E\uFF0C-s
\u51FD\u6570\u8FD4\u56DE\u540E\uFF0C-f
\u51FD\u6570\u7ED3\u675F\u540E-b
\u3001-e
\u3001-s
\u9ED8\u8BA4\u5173\u95ED\uFF0C-f
\u9ED8\u8BA4\u6253\u5F00\uFF0C\u5F53\u6307\u5B9A\u89C2\u5BDF\u70B9\u88AB\u6253\u5F00\u540E\uFF0C\u5728\u76F8\u5E94\u4E8B\u4EF6\u70B9\u4F1A\u5BF9\u89C2\u5BDF\u8868\u8FBE\u5F0F\u8FDB\u884C\u6C42\u503C\u5E76\u8F93\u51FA\u51FD\u6570\u5165\u53C2
\u548C\u51FD\u6570\u51FA\u53C2
\u7684\u533A\u522B\uFF0C\u6709\u53EF\u80FD\u5728\u4E2D\u95F4\u88AB\u4FEE\u6539\u5BFC\u81F4\u524D\u540E\u4E0D\u4E00\u81F4\uFF0C\u9664\u4E86 -b
\u4E8B\u4EF6\u70B9 params
\u4EE3\u8868\u51FD\u6570\u5165\u53C2\u5916\uFF0C\u5176\u4F59\u4E8B\u4EF6\u90FD\u4EE3\u8868\u51FD\u6570\u51FA\u53C2-b
\u65F6\uFF0C\u7531\u4E8E\u89C2\u5BDF\u4E8B\u4EF6\u70B9\u662F\u5728\u51FD\u6570\u8C03\u7528\u524D\uFF0C\u6B64\u65F6\u8FD4\u56DE\u503C\u6216\u5F02\u5E38\u5747\u4E0D\u5B58\u5728location
\u4FE1\u606F\u3002location
\u6709\u4E09\u79CD\u53EF\u80FD\u503C\uFF1AAtEnter
\uFF0CAtExit
\uFF0CAtExceptionExit
\u3002\u5BF9\u5E94\u51FD\u6570\u5165\u53E3\uFF0C\u51FD\u6570\u6B63\u5E38 return\uFF0C\u51FD\u6570\u629B\u51FA\u5F02\u5E38\u3002\u63D0\u793A
\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u9ED8\u8BA4\u503C\u662F{params, target, returnObj}
$ watch demo.MathGame primeFactors -x 2
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 32 ms, listenerId: 5
method=demo.MathGame.primeFactors location=AtExceptionExit
ts=2021-08-31 15:22:57; [cost=0.220625ms] result=@ArrayList[
@Object[][
@Integer[-179173],
],
@MathGame[
random=@Random[java.util.Random@31cefde0],
illegalArgumentCount=@Integer[44],
],
null,
]
method=demo.MathGame.primeFactors location=AtExit
ts=2021-08-31 15:22:58; [cost=1.020982ms] result=@ArrayList[
@Object[][
@Integer[1],
],
@MathGame[
random=@Random[java.util.Random@31cefde0],
illegalArgumentCount=@Integer[44],
],
@ArrayList[
@Integer[2],
@Integer[2],
@Integer[26947],
],
]
location=AtExceptionExit
\uFF0C\u8BF4\u660E\u51FD\u6570\u629B\u51FA\u5F02\u5E38\u4E86\uFF0C\u56E0\u6B64returnObj
\u662F nulllocation=AtExit
\uFF0C\u8BF4\u660E\u51FD\u6570\u6B63\u5E38\u8FD4\u56DE\uFF0C\u56E0\u6B64\u53EF\u4EE5\u770B\u5230returnObj
\u7ED3\u679C\u662F\u4E00\u4E2A ArrayList$ watch demo.MathGame primeFactors "{params,returnObj}" -x 2 -b
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 50 ms.
ts=2018-12-03 19:23:23; [cost=0.0353ms] result=@ArrayList[
@Object[][
@Integer[-1077465243],
],
null,
]
$ watch demo.MathGame primeFactors "{params,target,returnObj}" -x 2 -b -s -n 2
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 46 ms.
ts=2018-12-03 19:29:54; [cost=0.01696ms] result=@ArrayList[
@Object[][
@Integer[1],
],
@MathGame[
random=@Random[java.util.Random@522b408a],
illegalArgumentCount=@Integer[13038],
],
null,
]
ts=2018-12-03 19:29:54; [cost=4.277392ms] result=@ArrayList[
@Object[][
@Integer[1],
],
@MathGame[
random=@Random[java.util.Random@522b408a],
illegalArgumentCount=@Integer[13038],
],
@ArrayList[
@Integer[2],
@Integer[2],
@Integer[2],
@Integer[5],
@Integer[5],
@Integer[73],
@Integer[241],
@Integer[439],
],
]
\u53C2\u6570\u91CC-n 2
\uFF0C\u8868\u793A\u53EA\u6267\u884C\u4E24\u6B21
\u8FD9\u91CC\u8F93\u51FA\u7ED3\u679C\u4E2D\uFF0C\u7B2C\u4E00\u6B21\u8F93\u51FA\u7684\u662F\u51FD\u6570\u8C03\u7528\u524D\u7684\u89C2\u5BDF\u8868\u8FBE\u5F0F\u7684\u7ED3\u679C\uFF0C\u7B2C\u4E8C\u6B21\u8F93\u51FA\u7684\u662F\u51FD\u6570\u8FD4\u56DE\u540E\u7684\u8868\u8FBE\u5F0F\u7684\u7ED3\u679C
\u7ED3\u679C\u7684\u8F93\u51FA\u987A\u5E8F\u548C\u4E8B\u4EF6\u53D1\u751F\u7684\u5148\u540E\u987A\u5E8F\u4E00\u81F4\uFF0C\u548C\u547D\u4EE4\u4E2D -s -b
\u7684\u987A\u5E8F\u65E0\u5173
-x
\u7684\u503C\uFF0C\u89C2\u5BDF\u5177\u4F53\u7684\u51FD\u6570\u53C2\u6570\u503C$ watch demo.MathGame primeFactors "{params,target}" -x 3
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 58 ms.
ts=2018-12-03 19:34:19; [cost=0.587833ms] result=@ArrayList[
@Object[][
@Integer[1],
],
@MathGame[
random=@Random[
serialVersionUID=@Long[3905348978240129619],
seed=@AtomicLong[3133719055989],
multiplier=@Long[25214903917],
addend=@Long[11],
mask=@Long[281474976710655],
DOUBLE_UNIT=@Double[1.1102230246251565E-16],
BadBound=@String[bound must be positive],
BadRange=@String[bound must be greater than origin],
BadSize=@String[size must be non-negative],
seedUniquifier=@AtomicLong[-3282039941672302964],
nextNextGaussian=@Double[0.0],
haveNextNextGaussian=@Boolean[false],
serialPersistentFields=@ObjectStreamField[][isEmpty=false;size=3],
unsafe=@Unsafe[sun.misc.Unsafe@2eaa1027],
seedOffset=@Long[24],
],
illegalArgumentCount=@Integer[13159],
],
]
-x
\u8868\u793A\u904D\u5386\u6DF1\u5EA6\uFF0C\u53EF\u4EE5\u8C03\u6574\u6765\u6253\u5370\u5177\u4F53\u7684\u53C2\u6570\u548C\u7ED3\u679C\u5185\u5BB9\uFF0C\u9ED8\u8BA4\u503C\u662F 1\u3002-x
\u6700\u5927\u503C\u662F 4\uFF0C\u9632\u6B62\u5C55\u5F00\u7ED3\u679C\u5360\u7528\u592A\u591A\u5185\u5B58\u3002\u7528\u6237\u53EF\u4EE5\u5728ognl
\u8868\u8FBE\u5F0F\u91CC\u6307\u5B9A\u66F4\u5177\u4F53\u7684 field\u3002$ watch demo.MathGame primeFactors "{params[0],target}" "params[0]<0"
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 68 ms.
ts=2018-12-03 19:36:04; [cost=0.530255ms] result=@ArrayList[
@Integer[-18178089],
@MathGame[demo.MathGame@41cf53f9],
]
$ watch demo.MathGame primeFactors "{params[0],throwExp}" -e -x 2
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 62 ms.
ts=2018-12-03 19:38:00; [cost=1.414993ms] result=@ArrayList[
@Integer[-1120397038],
java.lang.IllegalArgumentException: number is: -1120397038, need >= 2
at demo.MathGame.primeFactors(MathGame.java:46)
at demo.MathGame.run(MathGame.java:24)
at demo.MathGame.main(MathGame.java:16)
,
]
-e
\u8868\u793A\u629B\u51FA\u5F02\u5E38\u65F6\u624D\u89E6\u53D1throwExp
$ watch demo.MathGame primeFactors '{params, returnObj}' '#cost>200' -x 2
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 66 ms.
ts=2018-12-03 19:40:28; [cost=2112.168897ms] result=@ArrayList[
@Object[][
@Integer[1],
],
@ArrayList[
@Integer[5],
@Integer[428379493],
],
]
#cost>200
(\u5355\u4F4D\u662Fms
)\u8868\u793A\u53EA\u6709\u5F53\u8017\u65F6\u5927\u4E8E 200ms \u65F6\u624D\u4F1A\u8F93\u51FA\uFF0C\u8FC7\u6EE4\u6389\u6267\u884C\u65F6\u95F4\u5C0F\u4E8E 200ms \u7684\u8C03\u7528\u5982\u679C\u60F3\u67E5\u770B\u51FD\u6570\u8FD0\u884C\u524D\u540E\uFF0C\u5F53\u524D\u5BF9\u8C61\u4E2D\u7684\u5C5E\u6027\uFF0C\u53EF\u4EE5\u4F7F\u7528target
\u5173\u952E\u5B57\uFF0C\u4EE3\u8868\u5F53\u524D\u5BF9\u8C61
$ watch demo.MathGame primeFactors 'target'
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 52 ms.
ts=2018-12-03 19:41:52; [cost=0.477882ms] result=@MathGame[
random=@Random[java.util.Random@522b408a],
illegalArgumentCount=@Integer[13355],
]
\u7136\u540E\u4F7F\u7528target.field_name
\u8BBF\u95EE\u5F53\u524D\u5BF9\u8C61\u7684\u67D0\u4E2A\u5C5E\u6027
$ watch demo.MathGame primeFactors 'target.illegalArgumentCount'
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 67 ms.
ts=2018-12-03 20:04:34; [cost=131.303498ms] result=@Integer[8]
ts=2018-12-03 20:04:35; [cost=0.961441ms] result=@Integer[8]
watch demo.MathGame * '{params,@demo.MathGame@random.nextInt(100)}' -v -n 1 -x 2
[arthas@6527]$ watch demo.MathGame * '{params,@demo.MathGame@random.nextInt(100)}' -n 1 -x 2
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 5) cost in 34 ms, listenerId: 3
ts=2021-01-05 21:35:20; [cost=0.173966ms] result=@ArrayList[
@Object[][
@Integer[-138282],
],
@Integer[89],
]
\u63D0\u793A
watch/trace/monitor/stack/tt \u547D\u4EE4\u90FD\u652F\u6301 --exclude-class-pattern
\u53C2\u6570
\u4F7F\u7528 --exclude-class-pattern
\u53C2\u6570\u53EF\u4EE5\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B\uFF0C\u6BD4\u5982\uFF1A
watch javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter
\u9ED8\u8BA4\u60C5\u51B5\u4E0B watch/trace/monitor/stack/tt \u547D\u4EE4\u90FD\u4F1A\u5339\u914D\u5B50\u7C7B\u3002\u5982\u679C\u60F3\u4E0D\u5339\u914D\uFF0C\u53EF\u4EE5\u901A\u8FC7\u5168\u5C40\u53C2\u6570\u5173\u6389\u3002
options disable-sub-class true
\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
\u6BD4\u5982\uFF1A
$ watch -v -x 2 demo.MathGame print 'params' 'params[0] > 100000'
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 29 ms, listenerId: 11
Condition express: params[0] > 100000 , result: false
Condition express: params[0] > 100000 , result: false
Condition express: params[0] > 100000 , result: true
ts=2020-12-02 22:38:56; [cost=0.060843ms] result=@Object[][
@Integer[200033],
@ArrayList[
@Integer[200033],
],
]
Condition express: params[0] > 100000 , result: true
ts=2020-12-02 22:38:57; [cost=0.052877ms] result=@Object[][
@Integer[123047],
@ArrayList[
@Integer[29],
@Integer[4243],
],
]