溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

什么是ARMS Arthas診斷

發(fā)布時間:2021-10-12 15:12:31 來源:億速云 閱讀:177 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“什么是ARMS Arthas診斷”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

首先來看看我們排查線上問題的一個基本步驟,這個步驟一般是排查大多數(shù)線上問題的步驟。

步驟1:找到能復(fù)現(xiàn)問題的輸入;

步驟2:判斷該輸入能否在日常環(huán)境構(gòu)造, 如果能,調(diào)到步驟 5。如果不能,繼續(xù)步驟 3;

步驟3:查看線上環(huán)境日志,看能否找到異常輸入相關(guān)的異常日志,輔助排查問題;

步驟4:初步推斷問題原因,嘗試修復(fù)并加上更多日志輸出。然后打包、發(fā)布。重復(fù)步驟 3 直到定位根因;

步驟5:日常構(gòu)造相同輸入,單點(diǎn)調(diào)試,定位問題;

實際的場景中,因為線上線下環(huán)境隔離的問題,線上的輸入很多時候難以在日常環(huán)境中構(gòu)造,大多數(shù)時候我們都在步驟 2、3、4 中循環(huán),于是時間就在循環(huán)中慢慢的流逝了。

上面做這么多步驟其實對于查問題而言就是希望可以知道當(dāng)某段代碼執(zhí)行不符合預(yù)期的時候,這段代碼的輸入是什么,輸出是什么,拋出了什么異常,以及代碼中每一行的具體執(zhí)行情況。那么是否有一款產(chǎn)品可以讓用戶方便快捷的實現(xiàn)這個目標(biāo)呢?答案是有的。

聊一聊 ARMS


阿里云的應(yīng)用實時監(jiān)控服務(wù) ARMS  是一款應(yīng)用性能管理(APM)產(chǎn)品,包含應(yīng)用監(jiān)控、Prometheus 監(jiān)控和前端監(jiān)控三大子產(chǎn)品,涵蓋分布式應(yīng)用、容器環(huán)境、瀏覽器、小程序、APP 等領(lǐng)域的性能管理,能幫助用戶實現(xiàn)全棧式性能監(jiān)控和端到端全鏈路追蹤診斷。

ARMS 最新推出了 Arthas 診斷功能,其第一個版本主要包含四個能力,分別是 JVM 概覽、線程耗時分析、方法執(zhí)行分析以及性能分析。

  • JVM 概覽:查看實時的 JVM 內(nèi)存、GC 信息以及操作系統(tǒng)信息、環(huán)境變量、系統(tǒng)變量等信息。

  • 線程耗時分析:查看實時的線程耗時情況,并可查看每個線程實時的方法堆棧。

  • 方法執(zhí)行分析:實時的抓取滿足指定條件的方法執(zhí)行明細(xì)、出入?yún)?shù)以及異常。

  • 性能分析:快捷的通過火焰圖的的形式,展示系統(tǒng)性能瓶頸。

ARMS 的 Arthas 功能使用起來也比較簡單,詳情可參照文檔( https://help.aliyun.com/document_detail/204809.html )。下面來簡單聊一聊如何利用 ARMS 的 Arthas 診斷能力來進(jìn)行線上問題的定位。

聊一聊 ARMS Arthas 診斷


上一節(jié)簡單介紹了 ARMS 的 Arthas 診斷具備的能力,那么用這些能力能解決哪些線上問題呢?在這里,我們對線上問題進(jìn)行了一個歸納總結(jié),將其分為下面四類問題:

  • 方法執(zhí)行不符合預(yù)期: 包括方法執(zhí)行耗時、方法返回值、方法拋出了異常等情況,表現(xiàn)在應(yīng)用上可能是一些接口或者服務(wù)的 RT 增高,錯誤率增高,返回值異常等。

  • 進(jìn)程 CPU 耗時突增: 一般有代碼死循環(huán)問題、FullGC 導(dǎo)致 GC 線程耗時高、并發(fā)使用 HashMap 等。

  • 性能優(yōu)化問題: 主要用于分析性能瓶頸,輔助性能優(yōu)化,包括 CPU 耗時、內(nèi)存分配、鎖競爭、itimer 等情況的性能分析。

  • 其他問題: 比如初始化環(huán)境變量讀取錯誤、內(nèi)核版本不符合要求、類沖突等問題。

下面就以一個實際的 demo 來演示如何利用 ARMS 的 Arthas 執(zhí)行不符合預(yù)期這種問題的診斷,后續(xù)的文章會繼續(xù)介紹如何利用 Arthas 進(jìn)行其他類型問題的診斷。

利用 ARMS Arthas 診斷方法執(zhí)行不符合預(yù)期類問題

問題背景:product 應(yīng)用的 com.alibabacloud.hipstershop.productserviceapi.service.ProductService@confirmInventory   

接口某次發(fā)布后平均 RT 到達(dá) 400,發(fā)布以前的平均 RT 在 1ms 以下,如下圖所示?,F(xiàn)在想定位耗時具體耗在哪兒 。 

什么是ARMS Arthas診斷

首先,進(jìn)入 ARMS Arthas 診斷的頁面。當(dāng)我們進(jìn)行 Bug 定位的時候,首先需要知道出問題的類名和方法名,按照圖示截圖中的紅色注釋輸入相應(yīng)的類名和方法名。如果你是 EDAS用戶,可直接選擇一個服務(wù)或者接口,后臺會自動推斷相應(yīng)的實現(xiàn)類和方法。對應(yīng)到本案例,對應(yīng)的類是 com.alibabacloud.xxx.xxx.xxx.ProductService,方法是 confirmInventory。填寫完畢后點(diǎn)擊確定。
什么是ARMS Arthas診斷

如下圖所示,點(diǎn)擊確定后可以得到 confirmInventory 方法執(zhí)行的紀(jì)錄,包含執(zhí)行的入?yún)?,返回值異常以及方法?zhí)行明細(xì)。

什么是ARMS Arthas診斷

但是這次執(zhí)行的耗時 2.89 ms,不是我們預(yù)期中的一次耗時高調(diào)用。此時,可點(diǎn)擊右上角修改診斷參數(shù),設(shè)定抓取耗時大于 300ms 的方法調(diào)用(除此以外還可以設(shè)置更多的過濾條件,包括方法參數(shù)滿足的條件等等,具體可查看文檔)。

什么是ARMS Arthas診斷

點(diǎn)擊確定后,點(diǎn)擊右上角刷新圖標(biāo)再次診斷,這次抓取到一次耗時 1501ms 的方法調(diào)用,發(fā)現(xiàn)原來是在該方法的執(zhí)行過程中,執(zhí)行了 Thread.sleep() 方法。

什么是ARMS Arthas診斷

到這里,你可能還會好奇,為什么會執(zhí)行 sleep 方法呢?這塊代碼的邏輯是怎樣的呢?點(diǎn)擊右上角查看方法源碼,一目了然的將方法源碼與方法執(zhí)行明細(xì)相結(jié)合。如下圖所示,confirmInventory 方法中執(zhí)行的每一次方法調(diào)用最后會以“//-”為前綴展示該方法執(zhí)行的耗時情況。

什么是ARMS Arthas診斷

此外,你還可以點(diǎn)擊圖5 ,列表最右側(cè)的操作列的下鉆,快捷的進(jìn)一步分析 confirmInventory 調(diào)用的子方法的執(zhí)行情況。這在根因比較深的場景下十分方便好用。

至此,完成了我們這個問題的一個定位演示。

相信 ARMS 的 Arthas 診斷功能一定給你留下了深刻的印象,也一定會成為您線上問題診斷的利器,幫助您更快更方便的診斷線上故障。

“什么是ARMS Arthas診斷”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI