您好,登錄后才能下訂單哦!
本篇內容介紹了“什么是ARMS Arthas診斷”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
首先來看看我們排查線上問題的一個基本步驟,這個步驟一般是排查大多數線上問題的步驟。
步驟1:找到能復現問題的輸入;
步驟2:判斷該輸入能否在日常環境構造, 如果能,調到步驟 5。如果不能,繼續步驟 3;
步驟3:查看線上環境日志,看能否找到異常輸入相關的異常日志,輔助排查問題;
步驟4:初步推斷問題原因,嘗試修復并加上更多日志輸出。然后打包、發布。重復步驟 3 直到定位根因;
步驟5:日常構造相同輸入,單點調試,定位問題;
實際的場景中,因為線上線下環境隔離的問題,線上的輸入很多時候難以在日常環境中構造,大多數時候我們都在步驟 2、3、4 中循環,于是時間就在循環中慢慢的流逝了。
上面做這么多步驟其實對于查問題而言就是希望可以知道當某段代碼執行不符合預期的時候,這段代碼的輸入是什么,輸出是什么,拋出了什么異常,以及代碼中每一行的具體執行情況。那么是否有一款產品可以讓用戶方便快捷的實現這個目標呢?答案是有的。
阿里云的應用實時監控服務 ARMS 是一款應用性能管理(APM)產品,包含應用監控、Prometheus 監控和前端監控三大子產品,涵蓋分布式應用、容器環境、瀏覽器、小程序、APP 等領域的性能管理,能幫助用戶實現全棧式性能監控和端到端全鏈路追蹤診斷。
ARMS 最新推出了 Arthas 診斷功能,其第一個版本主要包含四個能力,分別是 JVM 概覽、線程耗時分析、方法執行分析以及性能分析。
JVM 概覽:查看實時的 JVM 內存、GC 信息以及操作系統信息、環境變量、系統變量等信息。
線程耗時分析:查看實時的線程耗時情況,并可查看每個線程實時的方法堆棧。
方法執行分析:實時的抓取滿足指定條件的方法執行明細、出入參數以及異常。
性能分析:快捷的通過火焰圖的的形式,展示系統性能瓶頸。
ARMS 的 Arthas 功能使用起來也比較簡單,詳情可參照文檔( https://help.aliyun.com/document_detail/204809.html )。下面來簡單聊一聊如何利用 ARMS 的 Arthas 診斷能力來進行線上問題的定位。
上一節簡單介紹了 ARMS 的 Arthas 診斷具備的能力,那么用這些能力能解決哪些線上問題呢?在這里,我們對線上問題進行了一個歸納總結,將其分為下面四類問題:
方法執行不符合預期: 包括方法執行耗時、方法返回值、方法拋出了異常等情況,表現在應用上可能是一些接口或者服務的 RT 增高,錯誤率增高,返回值異常等。
進程 CPU 耗時突增: 一般有代碼死循環問題、FullGC 導致 GC 線程耗時高、并發使用 HashMap 等。
性能優化問題: 主要用于分析性能瓶頸,輔助性能優化,包括 CPU 耗時、內存分配、鎖競爭、itimer 等情況的性能分析。
其他問題: 比如初始化環境變量讀取錯誤、內核版本不符合要求、類沖突等問題。
下面就以一個實際的 demo 來演示如何利用 ARMS 的 Arthas 執行不符合預期這種問題的診斷,后續的文章會繼續介紹如何利用 Arthas 進行其他類型問題的診斷。
問題背景:product 應用的 com.alibabacloud.hipstershop.productserviceapi.service.ProductService@confirmInventory
接口某次發布后平均 RT 到達 400,發布以前的平均 RT 在 1ms 以下,如下圖所示。現在想定位耗時具體耗在哪兒 。
首先,進入 ARMS Arthas 診斷的頁面。當我們進行 Bug 定位的時候,首先需要知道出問題的類名和方法名,按照圖示截圖中的紅色注釋輸入相應的類名和方法名。如果你是 EDAS用戶,可直接選擇一個服務或者接口,后臺會自動推斷相應的實現類和方法。對應到本案例,對應的類是 com.alibabacloud.xxx.xxx.xxx.ProductService,方法是 confirmInventory。填寫完畢后點擊確定。
如下圖所示,點擊確定后可以得到 confirmInventory 方法執行的紀錄,包含執行的入參,返回值異常以及方法執行明細。
但是這次執行的耗時 2.89 ms,不是我們預期中的一次耗時高調用。此時,可點擊右上角修改診斷參數,設定抓取耗時大于 300ms 的方法調用(除此以外還可以設置更多的過濾條件,包括方法參數滿足的條件等等,具體可查看文檔)。
點擊確定后,點擊右上角刷新圖標再次診斷,這次抓取到一次耗時 1501ms 的方法調用,發現原來是在該方法的執行過程中,執行了 Thread.sleep() 方法。
到這里,你可能還會好奇,為什么會執行 sleep 方法呢?這塊代碼的邏輯是怎樣的呢?點擊右上角查看方法源碼,一目了然的將方法源碼與方法執行明細相結合。如下圖所示,confirmInventory 方法中執行的每一次方法調用最后會以“//-”為前綴展示該方法執行的耗時情況。
此外,你還可以點擊圖5 ,列表最右側的操作列的下鉆,快捷的進一步分析 confirmInventory 調用的子方法的執行情況。這在根因比較深的場景下十分方便好用。
至此,完成了我們這個問題的一個定位演示。
相信 ARMS 的 Arthas 診斷功能一定給你留下了深刻的印象,也一定會成為您線上問題診斷的利器,幫助您更快更方便的診斷線上故障。
“什么是ARMS Arthas診斷”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。