首頁體育 > 正文

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

2021-11-12由 新時代數碼風暴 發表于 體育

文章來源:https://mp。weixin。qq。com/s/9GInnQ2JoeBBKirRjhEvUg作者:汪小哥

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

Arthas 對於很多Java開發者來說,已經不可分割了,在我們日常開發、線上問題排查中扮演了非常重要的角色。作為小開發的我,日常需要排查線上運營同學提的各種 bug、各種線上問題診斷、日常運維、線上問題最佳化等等。

在剛來公司時,我是比較恐懼運維任務的,程式碼不熟悉、各種問題比較多。。。幾乎崩潰的狀態,運維的一週基本上沒有幹活,完全是全身心投入到運維的任務中,排查問題效率低下。

由於深刻體驗到了這種奔潰,我一直想改變這種狀態,直到 Arthas 的開源,讓我在這種崩潰的狀態中減輕了不少負擔,同時也讓我成為了同事們諮詢 Arthas 排查問題的小幫手~~

雖然使用 Arthas 特別方便,但在此過程中也遇到一些問題,作為問題諮詢小幫手也感到有點不方便,因此才造就了 Arthas idea 外掛的誕生。

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

目前 Arthas 官方的工具還不夠簡單,需要記住一些命令,特別是一些擴充套件性特別強的高階語法,比如 ognl 獲取 spring context 為所欲為,watch、trace 不夠簡單,需要構造一些命令工具的資訊,因此只需要一個能夠簡單處理字串資訊的外掛即可使用。

當在處理線上問題的時候需要最快速、最便捷的命令,因此 Idea Arthas plugin 外掛還是有存在的意義和價值的。——-這個是最初編寫這個外掛的最核心的理由。

Arthas IDEA plugin 實踐

Arthas 的功能點非常的多(詳見下方大圖),這裡就不一一的講解了,可以參考使用文件 ,不過最近一直在更新,使用文件中的命令名稱可能有變化。

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

外掛安裝

下載arthas idea外掛:

https://plugins。jetbrains。com/plugin/13581-arthas-idea

Mac: Preferences -> Plugins

Windows:Settings -> Plugins

Install Plugin form Disk。。。 匯入外掛

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

安裝之後重啟IDEA就可以愉快的使用啦!

獲取static 變數

首先要獲取classloader的hash 值,然後獲取命令,這個是一個互動流程需要連貫性,後續只要是static 的透過static spring context的都需要有這個互動的流程,連貫的,都在同一個介面進行操作。貼上執行,然後獲取結果即可。

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

最後合併的指令碼如下。

反射設定static field

透過反射進行設定static field ,參考:https://github。com/WangJi92/arthas-idea-plugin/issues/1

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

填寫你想要修改的值、預設根據型別設定預設值 Str->“” Long -> 0L 等等。

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

Spring Context Invoke

透過spring context 進行呼叫bean的方法、欄位的內容。

Static Spring Context Invoke Method Field

首頁要設定一下static spring context的路徑

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

由於都是透過ognl 呼叫static的spring context 都需要classloader,這個就是配置的spring conetxt的地址資訊:@com。wangji92。arthas。plugin。demo。common。ApplicationContextProvider@context 參考demo 就需要配置這個地址。

Watch Spring Context Invoke Method Field

watch 這個是支援在spring mvc場景 透過watch 間接的獲取spring context,需要出發一次介面的呼叫,可以參考 :https://github。com/WangJi92/arthas-idea-plugin/issues/5

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

TimeTunnel Spring Context Invoke Method Field

這個是參考了橫雲斷嶺 的arthas 透過tt 獲取spring context 為所欲為 ,可以參考這個文件:https://github。com/WangJi92/arthas-idea-plugin/issues/4 這裡做了些什麼?將整個連貫了起來,不需要記住引數資訊,然後對於呼叫的引數進行簡單的預設封裝,複雜的引數場景不支援,需要手動拼接。

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

記錄獲取spring context

然後根據這個target 獲取spring context 呼叫方法

獲取某個spring 環境變數

獲取spring 環境變數這裡依託,static spring context ,當然這個watch 、和 tt 獲取spring context的場景也是支援的。在線上環境、測試環境程式多複雜,你怎麼知道環境中的變數一定是你配置的?在nacos等等配置中心的場景,估計手速慢了一點點,可能就沒有上去,這個時候就有這種需求獲取當前的環境變數。選中變數,然後右鍵執行命令。由於使用靜態的static spring context 依然需要classloader的值。這裡已經基本上是arthas的上層應用啦。

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

獲取全部的spring 環境變數

比較優先順序,最前面的一定優先順序最高,你一定被spring的各種優先順序順序搞暈了,那麼怎麼辦呢?arthas idea plugin 支援獲取當前的全部的環境變數,依次打印出來

,這樣就可以瞭解優先順序,

特別是接入了nacos、diamond等遠端的配置中心,實現不一樣肯定更暈了。參考文件:https://blog。csdn。net/xunjiushi9717/article/details/94050139

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

TimeTunnel Tt

方法執行資料的時空隧道,記錄下指定方法每次呼叫的入參和返回資訊,並能對這些不同的時間下呼叫進行觀測(可以重新觸發,週期觸發,唯一缺點對於ThreadLocal 資訊丟失[隱含引數]、引用物件資料變更無效),這個方便二次觸發,特別是自己除錯不方便的情況下記錄下來,二次觸發、週期觸發,不過自從段嶺大神tt 為所欲為之後都被帶偏了。這裡arthas 外掛做了一些什麼?增加了二次觸發的一些常用的命令,不讓使用者愁於記憶,整個過程更加的具有連貫性。

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

stack 堆疊

獲取方法從哪裡執行的呼叫棧(用途:原始碼學習呼叫堆疊,瞭解呼叫流程) 這個是非常好用的功能,對於喜歡樂於排查問題的小夥伴真是福音,arthas idea 外掛只是修改的命令的整合,之前也處理自己編碼過程中的問題,原始碼、問題排查技巧-Java Debug and Arthas:https://blog。csdn。net/u012881904/article/details/104591529

Decompile Class Jad

反編譯方法、類的原始碼, 有時候需要檢視提交的程式碼是否上線呢?這個功能就非常的友好。參考文件:https://github。com/WangJi92/arthas-idea-plugin/issues/2

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

watch、trace

增加了預設引數、預設展開的層級 限制次數,使用者不用知道這些核心的引數,簡單的使用就好了,要使用更加的高階的自己help 一下就知道了。

trace -E(層級的列印trace)

trace -E 自己構造起來非常的麻煩,透過介面操作簡化了一下,需要觀察多個類、多個方法的場景。選擇你需要的場景繼續新增即可。

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

Heap Dump

列印堆疊,有點類似 jmap -dump:format=b,file=/temp/dump。hprof pid 下載下來使用MAT分析即可。

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

特殊用法連結

這個必須要說一下,這個特殊用法的連結在線上自己束手無措的時候可以檢視一下,非常有用。

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

阿里開源的那個牛X的問題排查工具——Arthas,推出IDEA外掛了!

對於透過spring context 呼叫方法說明

透過spring context 呼叫複雜的方法其實是不支援的,由於這個操作起來不方便,還是必須手工處理一下。比如這裡的 Map names 的處理方式可以借鑑一下子。更多可以參考demo https://github。com/WangJi92/arthas-plugin-demo

總結

本文簡單介紹了Arthas IDEA外掛的安裝與使用技巧,該外掛解放了大家對於 Arthas 使用的一些記憶、機械性的重複工作,歡迎大家試用!

頂部