Arthas watch 方法執行數據觀測

watch 讓你能方便的觀察到指定方法的調用狀況。能觀察到的範圍爲:返回值拋出異常入參,經過編寫 OGNL 表達式進行對應變量的查看。html

參數說明

watch 的參數比較多,主要是由於它能在 4 個不一樣的場景觀察對象java

參數名稱 參數說明
class-pattern 類名錶達式匹配
method-pattern 方法名錶達式匹配
express 觀察表達式
condition-express 條件表達式
[b] 方法調用以前觀察
[e] 方法異常以後觀察
[s] 方法返回以後觀察
[f] 方法結束以後(正常返回和異常返回)觀察
[E] 開啓正則表達式匹配,默認爲通配符匹配
[x:] 指定輸出結果的屬性遍歷深度,默認爲 1
[n:] 命令執行次數
[#cost:] 方法執行耗時

這裏重點要說明的是觀察表達式,觀察表達式的構成主要由 ognl 表達式組成,因此你能夠這樣寫"{params,returnObj}",只要是一個合法的 ognl 表達式,都能被正常支持。git

觀察的維度也比較多,主要體如今參數 advice  的數據結構上。Advice 參數最主要是封裝了通知節點的全部信息。請參考表達式核心變量中關於該節點的描述。github

特別說明正則表達式

  • watch 命令定義了4個觀察事件點,即 -b 方法調用前,-e 方法異常後,-s 方法返回後,-f 方法結束後
  • 4個觀察事件點 -b-e-s 默認關閉,-f 默認打開,當指定觀察點被打開後,在相應事件點會對觀察表達式進行求值並輸出
  • 這裏要注意方法入參方法出參的區別,有可能在中間被修改致使先後不一致,除了 -b 事件點 params 表明方法入參外,其他事件都表明方法出參
  • 當使用 -b 時,因爲觀察事件點是在方法調用前,此時返回值或異常均不存在

同時觀察方法調用前和方法返回後

$ watch demo.MathGame primeFactors "{params,target,returnObj}"  "params[0] instanceof java.lang.Integer"  -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[1544665400],
    ],
    @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[1544665400],
    ],
    @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],
    ],
]
  • 參數裏-n 2,表示只執行兩次
  • 這裏輸出結果中,第一次輸出的是方法調用前的觀察表達式的結果,第二次輸出的是方法返回後的表達式的結果
  • 結果的輸出順序和事件發生的前後順序一致,和命令中 -s -b 的順序無關

更多信息查看文檔:https://alibaba.github.io/arthas/watch.htmlexpress

相關文章
相關標籤/搜索