欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java之生產(chǎn)故障定位Arthas問題

 更新時間:2022年06月07日 15:17:27   作者:enjoy囂士  
這篇文章主要介紹了java之生產(chǎn)故障定位Arthas問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

生產(chǎn)故障定位Arthas

Arthas(阿爾薩斯)能為你做什么?

Arthas 是Alibaba開源的Java診斷工具,深受開發(fā)者喜愛。當(dāng)你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:

  • 這個類從哪個 jar 包加載的?為什么會報各種類相關(guān)的 Exception?
  • 我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯了?
  • 遇到問題無法在線上 debug,難道只能通過加日志再重新發(fā)布嗎?
  • 線上遇到某個用戶的數(shù)據(jù)處理有問題,但線上同樣無法 debug,線下無法重現(xiàn)!
  • 是否有一個全局視角來查看系統(tǒng)的運行狀況?
  • 有什么辦法可以監(jiān)控到JVM的實時運行狀態(tài)?
  • 怎么快速定位應(yīng)用的熱點,生成火焰圖?

Arthas支持JDK 6+,支持Linux/Mac/Winodws,采用命令行交互模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。

熟悉C++的同學(xué),應(yīng)該了解GDB調(diào)試工具。Arthas就是java版的GDB工具。

如果想了解學(xué)習(xí),可以按照 這個文檔來 學(xué)習(xí)實踐

當(dāng)然,官網(wǎng) 是最好的。

java診斷工具Arthas(watch命令)方法觀察神器

能方便的觀察到指定方法的調(diào)用情況。能觀察到的范圍為:返回值、拋出異常、入?yún)ⅰ?nbsp;

watch

1、得到要觀察類的類屬性以及值,調(diào)用類方法

2、得到類對象的屬性以及值

3、得到方法調(diào)用前后的入?yún)?、出參?/p>

4、根據(jù)調(diào)用時長,入?yún)⑵ヅ錀l件,異常情況過濾方法調(diào)用情況

參數(shù)說明

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

參數(shù)名稱參數(shù)說明
class-pattern類名表達式匹配
method-pattern方法名表達式匹配
express觀察表達式,默認(rèn)值:{params, target, returnObj}
condition-express條件表達式
[b]在方法調(diào)用之前觀察
[e]在方法異常之后觀察
[s]在方法返回之后觀察
[f]在方法結(jié)束之后(正常返回和異常返回)觀察
[E]開啟正則表達式匹配,默認(rèn)為通配符匹配
[x:]指定輸出結(jié)果的屬性遍歷深度,默認(rèn)為 1

特別說明

  • watch 命令定義了4個觀察事件點,即 -b 方法調(diào)用前,-e 方法異常后,-s 方法返回后,-f 方法結(jié)束后
  • 4個觀察事件點 -b、-e、-s 默認(rèn)關(guān)閉,-f 默認(rèn)打開,當(dāng)指定觀察點被打開后,在相應(yīng)事件點會對觀察表達式進行求值并輸出
  • 這里要注意方法入?yún)⒑头椒ǔ鰠⒌膮^(qū)別,有可能在中間被修改導(dǎo)致前后不一致,除了 -b 事件點 params 代表方法入?yún)⑼猓溆嗍录即矸椒ǔ鰠?/li>
  • 當(dāng)使用 -b 時,由于觀察事件點是在方法調(diào)用前,此時返回值或異常均不存在
  • 在watch命令的結(jié)果里,會打印出location信息。location有三種可能值:AtEnter,AtExit,AtExceptionExit。對應(yīng)函數(shù)入口,函數(shù)正常return,函數(shù)拋出異常。

 1、觀察方法入?yún)?/strong>

watch demo.MathGame primeFactors "{params,returnObj}" -x 2 -b

執(zhí)行結(jié)果如下圖所示 

 result中的Object數(shù)組為入?yún)ⅲ愋蜑镮nteger值分別為-198028,-134246,-2551等。

-b表示觀察點為方法調(diào)用前。此時方法剛封裝好形參,還沒有進入方法執(zhí)行體。

2、同時觀察方法調(diào)用前和方法返回后

watch demo.MathGame primeFactors "{params,target,returnObj}" -x 2 -b -s -n 2

以上命令可以將調(diào)用方法前(-b參數(shù))"{params,target,returnObj}"即入?yún)ⅲ瑃his對象和返回參數(shù)返回。

可以將調(diào)用方法返回后(-s參數(shù))的"{params,target,returnObj}"即入?yún)ⅲ瑃his對象和返回參數(shù)返回。

如果參數(shù)形式為"{params,returnObj}"只返回入?yún)⒑突貐ⅰ?/p>

以上所有結(jié)果均在result中體現(xiàn)。

  • 參數(shù)里-n 2,表示只執(zhí)行兩次
  • 這里輸出結(jié)果中,第一次輸出的是方法調(diào)用前的觀察表達式的結(jié)果,第二次輸出的是方法返回后的表達式的結(jié)果
  • 結(jié)果的輸出順序和事件發(fā)生的先后順序一致,和命令中 -s -b 的順序無關(guān)

3、 調(diào)整-x的值,觀察具體的方法參數(shù)值

watch demo.MathGame primeFactors "{params,target,returnObj}" -x 3 -b -s -n 2

-x表示遍歷深度,可以調(diào)整來打印具體的參數(shù)和結(jié)果內(nèi)容,默認(rèn)值是1。

可以看到MathGame類的實例中的屬性和值。

4、入?yún)l件表達式

watch demo.MathGame primeFactors "{params[0],target}" "params[0]<0 -b

過濾出來方法調(diào)用前匹配條件為參數(shù)>0的入?yún)⒑蛅his對象,只有滿足條件的調(diào)用才會返回。

5、按照耗時進行過濾

watch demo.MathGame primeFactors '{params, returnObj}' '#cost>2' -x 2

過濾出來時長調(diào)用大于2ms的。

6、觀察異常信息

watch demo.MathGame primeFactors "{params[0],throwExp}" -e -x 2

  • -e 表示拋出異常時才觸發(fā)
  • express中,表示異常信息的變量是throwExp

7、訪問當(dāng)前對象中的某個屬性

watch demo.MathGame primeFactors 'target.illegalArgumentCount'

8、獲取類的靜態(tài)字段、調(diào)用類的靜態(tài)方法

獲取類的靜態(tài)字段

 watch demo.MathGame * '{params,@demo.MathGame@random.nextInt(100)}' -v -n 1 -x 2

調(diào)用類的靜態(tài)方法。

參考:arthas官方文檔

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java線程狀態(tài)運行原理解析

    Java線程狀態(tài)運行原理解析

    這篇文章主要介紹了Java線程狀態(tài)運行原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • 關(guān)于maven依賴 ${xxx.version}報錯問題

    關(guān)于maven依賴 ${xxx.version}報錯問題

    這篇文章主要介紹了關(guān)于maven依賴 ${xxx.version}報錯問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring Boot 2.0多數(shù)據(jù)源配置方法實例詳解

    Spring Boot 2.0多數(shù)據(jù)源配置方法實例詳解

    這篇文章主要介紹了Spring Boot 2.0多數(shù)據(jù)源配置方法實例詳解,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • Java網(wǎng)絡(luò)編程基礎(chǔ)教程之Socket入門實例

    Java網(wǎng)絡(luò)編程基礎(chǔ)教程之Socket入門實例

    這篇文章主要介紹了Java網(wǎng)絡(luò)編程基礎(chǔ)教程之Socket入門實例,本文講解了創(chuàng)建Socket、Socket發(fā)送數(shù)據(jù)、Socket讀取數(shù)據(jù)、關(guān)閉Socket等內(nèi)容,都是最基礎(chǔ)的知識點,需要的朋友可以參考下
    2014-09-09
  • Java生成UUID的常用方式示例代碼

    Java生成UUID的常用方式示例代碼

    UUID保證對在同一時空中的所有機器都是唯一的,通常平臺會提供生成的API,按照開放軟件基金會(OSF)制定的標(biāo)準(zhǔn)計算,用到了以太網(wǎng)卡地址、納秒級時間、芯片ID碼和許多可能的數(shù)字,下面這篇文章主要給大家介紹了關(guān)于Java生成UUID的常用方式,需要的朋友可以參考下
    2023-05-05
  • 詳解SpringMVC @RequestBody接收J(rèn)son對象字符串

    詳解SpringMVC @RequestBody接收J(rèn)son對象字符串

    這篇文章主要介紹了詳解SpringMVC @RequestBody接收J(rèn)son對象字符串,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 數(shù)據(jù)庫基本操作語法歸納總結(jié)

    數(shù)據(jù)庫基本操作語法歸納總結(jié)

    本篇文章主要介紹了數(shù)據(jù)庫的一些常用方法及一些基本操作,需要的朋友可以參考下
    2017-04-04
  • Java實現(xiàn)動態(tài)規(guī)劃背包問題

    Java實現(xiàn)動態(tài)規(guī)劃背包問題

    本文主要介紹使用java實現(xiàn)動態(tài)規(guī)劃的背包問題,詳細(xì)使用圖文和多種案例進行解析,幫助理解該算法
    2021-06-06
  • SpringBoot3整合 Elasticsearch 8.x 使用Repository構(gòu)建增刪改查示例應(yīng)用

    SpringBoot3整合 Elasticsearch 8.x 使用Repository構(gòu)

    我們構(gòu)建了一個完整的 Spring Boot 3 和 Elasticsearch 8.x 的增刪改查示例應(yīng)用,使用 Spring Data Elasticsearch Repository,我們能夠快速實現(xiàn)對 Elasticsearch 的基本 CRUD 操作,簡化了開發(fā)流程,希望這個示例能夠幫助你理解如何在項目中有效使用 Elasticsearch!
    2024-11-11
  • Java單例模式利用HashMap實現(xiàn)緩存數(shù)據(jù)

    Java單例模式利用HashMap實現(xiàn)緩存數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了Java單例模式利用HashMap實現(xiàn)緩存數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論