国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

arthas--watch函數(shù)執(zhí)行數(shù)據(jù)觀測

這篇具有很好參考價值的文章主要介紹了arthas--watch函數(shù)執(zhí)行數(shù)據(jù)觀測。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

背景

參數(shù)說明

參考


背景

watch能方便的觀察到指定函數(shù)的調(diào)用情況。能觀察到的范圍為:返回值拋出異常、入?yún)?/code>,通過編寫 OGNL 表達式進行對應(yīng)變量的查看。ognl學(xué)習(xí),可以參考:https://xiaopanjia.blog.csdn.net/article/details/130429470

參數(shù)說明

watch 的參數(shù)比較多,主要是因為它能在 4 個不同的場景觀察對象

參數(shù)名稱 參數(shù)說明
class-pattern 類名表達式匹配
method-pattern 函數(shù)名表達式匹配
express 觀察表達式,默認值:{params, target, returnObj}
condition-express 條件表達式
[b] 函數(shù)調(diào)用之前觀察
[e] 函數(shù)異常之后觀察
[s] 函數(shù)返回之后觀察
[f] 函數(shù)結(jié)束之后(正常返回和異常返回)觀察
[E] 開啟正則表達式匹配,默認為通配符匹配
[x:] 指定輸出結(jié)果的屬性遍歷深度,默認為 1,最大值是 4
[m <arg>] 指定 Class 最大匹配數(shù)量,默認值為 50。長格式為[maxMatch <arg>]。
[n] 設(shè)置執(zhí)行的次數(shù)

特別說明:
1、注意函數(shù)入?yún)?/code>和函數(shù)出參的區(qū)別,有可能在中間被修改導(dǎo)致前后不一致,除了?-b?事件點?params?代表函數(shù)入?yún)⑼?,其余事件都代表函?shù)出參
2、當(dāng)使用?-b?時,由于觀察事件點是在函數(shù)調(diào)用前,此時返回值或異常均不存在
3、4 個觀察事件點?-b、-e、-s?默認關(guān)閉,-f?默認打開,當(dāng)指定觀察點被打開后,在相應(yīng)事件點會對觀察表達式進行求值并輸出

例如:

1、觀察函數(shù)調(diào)用返回時的參數(shù)、this 對象和返回值

$ watch demo.MathGame primeFactors -x 2
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],
    ],
]

2、觀察函數(shù)調(diào)用入口的參數(shù)和返回值

$ 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,
]

事件點為函數(shù)執(zhí)行前,因此獲取不到返回值。

3、同時觀察函數(shù)調(diào)用前和函數(shù)返回后

$ 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],
    ],
]

特殊說明:

  • 參數(shù)里-n 2,表示只執(zhí)行兩次

  • 這里輸出結(jié)果中,第一次輸出的是函數(shù)調(diào)用前的觀察表達式的結(jié)果,第二次輸出的是函數(shù)返回后的表達式的結(jié)果

  • 結(jié)果的輸出順序和事件發(fā)生的先后順序一致,和命令中?-s -b?的順序無關(guān)

4、條件表達式的例子

只有滿足條件的調(diào)用,才會有響應(yīng)

$ 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],
]

5、觀察異常信息的例子

$ 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表示拋出異常時才觸發(fā)
  • express 中,表示異常信息的變量是throwExp

6、按照耗時進行過濾

$ 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(單位是ms)表示只有當(dāng)耗時大于 200ms 時才會輸出,過濾掉執(zhí)行時間小于 200ms 的調(diào)用

7、觀察當(dāng)前對象中的屬性

查看函數(shù)運行前后,當(dāng)前對象中的屬性,可以使用target關(guān)鍵字,代表當(dāng)前對象。然后使用target.field_name訪問當(dāng)前對象的某個屬性。

$ 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],
]

$ 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]

8、排除掉指定的類

使用?--exclude-class-pattern?參數(shù)可以排除掉指定的類,比如:

watch javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter

9、投影(Across)

簡單的說,就是查看集合中元素的屬性或者方法返回值

watch com.example.httpclientdemo.HttpclientDemoApplication doSend 'params[0].{#this.username}' -b -x 2
Press Q or Ctrl+C to abort.
Affect(class-cnt:2 , method-cnt:1) cost in 28 ms.
ts=2019-09-26 15:19:49; [cost=0.006187ms] result=@ArrayList[
    @String[u0],
    @String[u1],
    @String[u2],
    @String[u3],
    @String[u4],
    @String[u5],
    @String[u6],
    @String[u7],
    @String[u8],
    @String[u9],
]

watch com.example.httpclientdemo.HttpclientDemoApplication doSend 'params[0].{? #this.id > 8}' -b -x 2
Press Q or Ctrl+C to abort.
Affect(class-cnt:2 , method-cnt:1) cost in 33 ms.
ts=2019-09-26 15:23:10; [cost=0.006812ms] result=@ArrayList[
    @User[
        username=@String[u9],
        id=@Long[9],
    ],
]

在投影中過濾后計數(shù)

watch com.example.HttpclientDemoApplication doSend 'params[0].{? #this.username.endsWith("9")}.size()'

選擇第一個匹配項

watch com.example.HttpclientDemoApplication doSend 'params[0].{^#this.username.startsWith("u")}' -b -x 2

選擇最后一個匹配項

watch com.example.HttpclientDemoApplication doSend 'params[0].{$#this.username.startsWith("u")}' -b -x 2

?10、條件表達式和觀察表達式

ognl有兩種表達式,條件表達式和觀察表達式,條件表達式關(guān)注于這次請求能不能攔截到,觀察表達式關(guān)注于這次請求打印出什么東西,兩者區(qū)別如下:

條件表達式過濾的是一次調(diào)用,判斷該次調(diào)用能否返回

觀察表達式里的過濾,過濾的是該次調(diào)用的數(shù)據(jù),不管怎么寫,該次調(diào)用一定返回

案例如下:

 
watch com.example.HttpclientDemoApplication doSend 
'params[0].{#this.username}' 'params[0].{? #this.id>7}.size()>0'

其中'params[0].{#this.username}’是觀察表達式,'params[0].{? #this.id>7}.size()>0’是條件表達式。

觀察表達式和條件表達式都可以用ognl。

參考

watch | arthas文章來源地址http://www.zghlxwxcb.cn/news/detail-431635.html

到了這里,關(guān)于arthas--watch函數(shù)執(zhí)行數(shù)據(jù)觀測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • watch 和 methods 執(zhí)行順序

    問題:在平臺選擇改變的時候獲取服務(wù)類目,但服務(wù)類目中接口入?yún)⒁恢睘榭?思路:感覺明明在watch已經(jīng)給platform 賦值過卻依然我沒值 所以只有一種可能就是,methods中方法的執(zhí)行順序 早于 watch 解決辦法:就是在平臺選擇改變時,給接口入?yún)①x值,添加了【代碼1】這一行 知

    2024年02月11日
    瀏覽(30)
  • Linux 反復(fù)執(zhí)行一條命令--watch命令

    在Linux中,我們可能會需要反復(fù)的執(zhí)行一個命令以查看狀態(tài)的變化,比如之前我在啟動一個項目的時候沒有什么反應(yīng),于是我便自己寫腳本反復(fù) curl 這個端口,下面用輸出 Hello World 舉出這個例子: 我們的需求是非常簡單地,只需要不斷地間隔一秒輸出 Hello World ,但是卻需要

    2023年04月21日
    瀏覽(16)
  • vue 初始化方法 create,beforeMount,mount,computed,watch 方法執(zhí)行順序及使用場景

    前言:vue 存在一些基本屬性和相關(guān)對象如果合理使用,可以避免代碼混亂 執(zhí)行順序 create beforeMount computed mounted watch 方法說明 created執(zhí)行時掛載階段還沒有開始,模版還沒有渲染成html,所以無法獲取元素。created鉤子函數(shù)主要用來初始化數(shù)據(jù)。 beforeMount 這一步的時候,模版已經(jīng)

    2024年02月11日
    瀏覽(20)
  • 【vueJs源碼】閱讀之vm.$watch函數(shù)

    【vueJs源碼】閱讀之vm.$watch函數(shù)

    我們經(jīng)常使用watch肯定知道它,他和computer一樣都是數(shù)據(jù)發(fā)生變化都會觸發(fā)它。今天我們就來了解一下它的原理。 這是vuejs源碼定義,第一個參數(shù)是一個表達式,表示要觀察的表達式,或者couputed函數(shù)在vuejs實例上的變化。 第二個參數(shù)是一個回調(diào)函數(shù),調(diào)用時會從參數(shù)得到新數(shù)

    2024年02月16日
    瀏覽(14)
  • Vue3通透教程【六】setup語法糖、computed函數(shù)、watch函數(shù)

    專欄介紹: 涼哥作為 Vue 的忠實 粉絲輸出過大量的 Vue 文章,應(yīng)粉絲要求開始更新 Vue3 的相關(guān)技術(shù)文章,Vue 框架目前的地位大家應(yīng)該都曉得,所謂三大框架使用人數(shù)最多,公司選型最多的框架,涼哥之前在文章中也提到過就是 Vue 框架之所以火起來的原因,和 Vue 框架相比其

    2024年01月20日
    瀏覽(23)
  • 入門漏洞——命令執(zhí)行漏洞、目錄瀏覽漏洞

    入門漏洞——命令執(zhí)行漏洞、目錄瀏覽漏洞

    一、命令執(zhí)行漏洞 1.介紹 命令執(zhí)行(Command Execution)漏洞即可以直接在Web應(yīng)用中執(zhí)行系統(tǒng)命令,從而獲取敏感信息或者拿下shell權(quán)限,服務(wù)器沒有對執(zhí)行的命令進行過濾。用戶可以隨意執(zhí)行系統(tǒng)命令,屬于高危漏洞 命令執(zhí)行漏洞可能造成的原因是Web服務(wù)器對用戶輸入命令安全

    2024年02月04日
    瀏覽(18)
  • 【數(shù)據(jù)開發(fā)】HiveSQL 臨時表&分步執(zhí)行(with, as )與時間函數(shù)(時間戳unix_timestamp)

    1、分步執(zhí)行(with…as…) Hive SQL中的WITH…AS…語句可以用于分步執(zhí)行,即將一個大的查詢語句拆分成多個小的查詢語句,每個小的查詢語句都可以使用WITH…AS…語句定義一個臨時表,然后在后面的查詢語句中使用這些臨時表。 用法1,增加一張臨時表/臨時步驟 用法2,增加并

    2024年01月16日
    瀏覽(14)
  • php限定能執(zhí)行的php目錄以及路徑

    server { ? ? listen 80; ? ? server_name www.sdph.org.cn sdph.org.cn; ? ? index index.php index.html index.htm default.php default.htm default.html; ? ? root /www/wwwroot/yixuehui1/public; ? ? location ~* ^/(static|uploads|upload|images|cache|tmp|css|js)/.*.(php|php5)$ { ? ? ? ? deny all;? ? ? } ? ?? ? ? location = /index.php { ? ? ? ?

    2024年02月06日
    瀏覽(18)
  • 可觀測數(shù)據(jù)采集端的管控方案的簡單對比

    當(dāng)前,主流的日志采集產(chǎn)品除了SLS的ilogtail,還有Elastic Agent、Fluentd、Telegraf、Sysdig、Logkit、Loggie、Flume等。詳細的對比結(jié)果見下表: 備注: 集群監(jiān)控:表示工具可以查看管理采集端的運行狀態(tài)、采集速度等數(shù)據(jù) 集群管理:表示工具可以對管理采集端的采集配置、運行參數(shù)等

    2024年01月25日
    瀏覽(16)
  • 【阿里云Grafana】數(shù)據(jù)可觀測云監(jiān)控大盤服務(wù)

    【阿里云Grafana】數(shù)據(jù)可觀測云監(jiān)控大盤服務(wù)

    新手友好系列之云產(chǎn)品免費試用:https://click.aliyun.com/m/1000370363/ 在監(jiān)控系統(tǒng)體系里,grafana相信大家都是聽說過的,grafana將我們的監(jiān)控數(shù)據(jù)以大屏的形式直觀的展示出來,作為一個喜歡折騰linux的我來說,自從grafana開源套件的出現(xiàn),他的展示直觀、配置輕便、功能強大、界面

    2024年02月09日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包