首頁體育 > 正文

這四個問題場景你會排查原因嗎?看看高手是如何快速定位原因的!

2021-10-14由 電子產品愛好者 發表于 體育

作者 | 張奇(司楚)

當線上碰到頭疼的問題時,還在對著程式碼一行行的看?真的不太時髦了啊喂~

這四個問題場景你會排查原因嗎?看看高手是如何快速定位原因的!

俗話說的好 “

問題排查不用愁,Arthas 來幫您忙

。” 今天就來說說這個讓媽媽再也不用擔心我排查問題的 Java 診斷神器:Arthas!

什麼是 Arthas?

Arthas 是一款開源線上診斷工具,採用命令列互動模式,支援 web 端線上診斷,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。相對比直接下載使用,我推薦開發者可以試一下透過 IDE外掛 Cloud Toolkit 中使用Arthas 來實現一鍵遠端診斷功能。

得益於 Arthas 強大且豐富的功能,讓 Arthas 能做的事情超乎想象。下面僅僅列舉幾項常見的使用情況,更多的使用場景可以在熟悉了 Arthas 之後自行探索。

是否有一個全域性視角來檢視系統的執行狀況?

為什麼 CPU 又升高了,到底是哪裡佔用了 CPU ?

執行的多執行緒有死鎖嗎?有阻塞嗎?

程式執行耗時很長,是哪裡耗時比較長呢?如何監測呢?

這個類從哪個 jar 包載入的?為什麼會報各種類相關的 Exception?

我改的程式碼為什麼沒有執行到?難道是我沒 commit?分支搞錯了?

遇到問題無法在線上 debug,難道只能透過加日誌再重新發布嗎?

有什麼辦法可以監控到 JVM 的實時執行狀態?

Arthas 的原理、命令在其官方文件有詳細介紹,下文將介紹一下近期幾個使用場景。

場景1:定位壓測時的效能瓶頸

平時伺服器請求都很正常。壓測時,依賴的服務、資料庫也都沒有到達瓶頸,但是機器的 CPU 全部飄紅,why?

透過 jstack 命令,只能看到某一時刻的堆疊,沒有抓到真兇。

thread 檢視當前執行緒資訊,檢視執行緒的堆疊。thread -n 3 -i 10000 可以統計 10 秒內最忙的 3 個執行緒,並且列印它們的堆疊,很容易發現問題。最終發現的問題比較簡單:日誌中列印了 location 的資訊,包括 類名、方法名和行號。動態獲取程式碼的方法名、行號等資訊,通常是透過 new Throwable() -> 列印 Throwable 的堆疊 -> 擷取堆疊中最頂層的業務程式碼 -> 拆分字串獲取類、方法、行號等資訊, 列印堆疊對效能損耗是比較大的。

這四個問題場景你會排查原因嗎?看看高手是如何快速定位原因的!

場景2:檢測偶發的超時

有段時間,總是碰到幾次偶爾的超時,但是看日誌都正常,鷹眼的呼叫鏈路都完全 ok,沒有哪一步資料庫操作或者 HSF 呼叫是特別慢的。

各種監控統計的時間維度的耗時,都十分正常,無法找到那個 rt 的尖刺。

想到了可能是日誌的問題,但是沒有證據支撐。

trace 命令能監控每一步的耗時,並且可以配合條件表示式,當耗時超過 xx ms 時列印詳細日誌。

找臺機器,輸入命令,後面的就是靜等了。再次出現 rt 尖刺時,能夠捕捉到耗時的分佈情況。

這四個問題場景你會排查原因嗎?看看高手是如何快速定位原因的!

透過 Arthas 拿到的結果,定位到是日誌列印的問題。同步日誌改為非同步日誌後,問題解決。

** **場景3:debug?那要是動態位元組碼生成咋辦?

之前碰到過一個 json 序列化時輸出的數字帶不帶引號的問題。當時各種 debug、看程式碼,發現是透過 ASM 動態位元組碼的方式生成的序列化類。到這完全放棄了,debug 已經無法定位問題了。當時透過另外一種方式避免了這種問題。

反過來看這個問題的時候,我們可以透過 Arthas 的 jad 命令,反編譯動態位元組碼生成的類,結合 watch 等命令,定位排查問題。

jad——反編譯指定已載入類的原始碼

這四個問題場景你會排查原因嗎?看看高手是如何快速定位原因的!

還有什麼?

有了這些能力就算萬能了?不不,接著往下看。

場景 4:做點壞事

在問題排查過程中,發現了日誌輸出到了控制檯,這個對效能的損耗是比較大的。有什麼辦法,在不釋出的情況下緊急解決它?

首先找到對應的 class

然後獲取 class 的屬性資訊,找到 appender 列表

刪除標準輸出的 appender

神器:火焰圖

排查效能問題的時候,還有一個神器:火焰圖透過火焰圖,很清晰的看到一段時間內,對每個方法耗時的統計。

這四個問題場景你會排查原因嗎?看看高手是如何快速定位原因的!

開始使用 Arthas

方式一:透過Cloud Toolkit 實現 Arthas 一鍵遠端診斷

Cloud Toolkit 是阿里雲釋出的免費本地 IDE 外掛,幫助開發者更高效地開發、測試、診斷並部署應用。透過外掛,可以將本地應用一鍵部署到任意伺服器,甚至雲端(ECS、EDAS、ACK、ACR 和 小程式雲等);並且還內建了 Arthas 診斷、Dubbo工具、Terminal 終端、檔案上傳、函式計算 和 MySQL 執行器等工具。不僅僅有 IntelliJ IDEA 主流版本,還有 Eclipse、Pycharm、Maven 等其他版本。

推薦使用 IDEA 外掛下載 Cloud Toolkit 來使用 Arthas:

http://t。tb。cn/2A5CbHWveOXzI7sFakaCw8

方式二:直接下載

地址:https://github。com/alibaba/arthas

Arthas 有獎徵文開始啦!

為了讓更多開發者開始用上 Arthas 這個Java 診斷神器,這一次我來發獎你來說,聊聊這些年你和 Arthas 之間的那些事兒。

第一期徵文活動將與

3 月 26 日— 4 月 26 日

舉辦,後續徵文活動將持續至 2020 年 12 月。

內容方向建議:

使用 Arthas 排查過的問題

對 Arthas 進行原始碼解讀

對 Arthas 提出建議

不限,其它與 Arthas 有關的內容

3 步提交徵文

直接使用 Arthas 或透過 Cloud Tookit 使用 Arthas;

將你的體驗整理成文章釋出在掘金社群;

按要求填寫以下表單:http://alibabadeveloper。mikecrm。com/9khcRrs

你將獲得的禮物

凡提交滿足投稿要求文章的同學,將獲得 Arthas Most Valuable User 福袋一份(禮品隨機),包含淘公仔、Arthas 貼紙、阿里雲 T 恤、JetBrains 周邊禮包;

第一期最受歡迎的 Top 3 文章,獲得天貓精靈一臺;

年度 Top 20 文章,將有機會獲得 Cherry 鍵盤及 JetBrains 提供的包括 Coupon 等周邊禮包。

你將獲得的榮譽

除了實物獎勵之外,你還會獲得:

在阿里巴巴雲原生公眾號和 Arthas 技術社群的首頁,展示您的文章及作者介紹模組,讓更多的開發者瞭解你;

成為 Arthas 社群的貢獻者,參與社群的日常運營,並作為社群講師參與 Arthas 線上/線下活動分享。

頂部