Arthas是診斷Java領域線上問題的利器,利用字節碼增強技術,可以在不重啟JVM進程的情況下,查看程序的運行情況。EDAS白屏化支持Arthas的常用功能,包括JVM概覽、線程耗時分析、方法執行分析和性能分析。
前提條件
要使用Arthas診斷的應用必須滿足以下條件:- 部署環境為EDAS K8s環境。說明 本文以容器服務Kubernetes版為例。
- 編程語言為Java。
- 3658端口和8563端口未被占用。
背景信息
Arthas是一款開源Java診斷工具,深受開發者歡迎。關于Arthas的更多信息,請參見Arthas官網。
升級arms-pilot并重啟應用
在使用Arthas診斷前,您需要先升級arms-pilot并重啟應用。
重要 升級arms-pilot不會對您的應用產生任何影響。但需要注意的是,在升級arms-pilot的過程中,請不要進行應用發布、應用重啟、應用回滾等操作。
為容器服務Kubernetes版升級arms-pilot并重啟應用的操作步驟如下:
- 升級arms-pilot。
- 登錄容器服務管理控制臺。
- 在左側導航欄,單擊集群。
- 在集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
- 在左側導航欄,選擇 。
- 在無狀態頁面,從命名空間下拉列表中選擇arms-pilot-system或arms-pilot。
- 找到名稱為arms-pilot-ack-arms-pilot的無狀態應用(Deployment),在其右側操作列,選擇 。
- 在重新部署對話框,單擊確定。
- 如果您的集群同時安裝了mse-pilot, 您需要在升級arms-pilot后升級mse-pilot。
- 在當前的無狀態頁面下,從命名空間下拉列表中選擇mse-pilot。
- 找到名稱為arms-pilot-ack-arms-pilot的無狀態應用(Deployment),在其右側操作列,單擊編輯。
- 在編輯頁面,設置鏡像Tag為v1.29,然后單擊更新。
重要 升級mse-pilot不會對您的應用產生任何影響。但需要注意的是,在升級mse-pilot的過程中,請不要進行應用發布、應用重啟、應用回滾等操作。 - 如果被監控的應用的PID為1,您需要修改應用的YAML配置文件。
- 重啟應用。
- 在無狀態頁面,從命名空間下拉列表,選擇應用所在命名空間,找到應用的Deployment,在其右側操作列,選擇 。
- 在重新部署對話框,單擊確定。
功能入口
- 登錄EDAS控制臺。
- 按需執行以下任一操作來進入應用的詳情頁面:
- 在左側導航欄選擇容器服務K8s集群或Serverless K8s集群頁面單擊集群ID,然后在集群詳情頁面的應用列表區域單擊具體應用名稱。 (或 ),在頂部菜單欄選擇地域并在頁面上方選擇微服務空間,在
- 在左側導航欄單擊應用列表,在頂部菜單欄選擇地域并在頁面上方選擇微服務空間,在集群類型下拉列表中選擇容器服務/Serverless K8s集群,然后單擊目標應用名稱。
- 在應用詳情的左邊導航欄中選擇 。
- 在Arthas診斷頁面,選擇應用的Pod。
- 如果檢測未下載Arthas,您需要重新部署探針以下載Arthas。具體操作,請參見步驟1。
- 如果檢測未掛載Arthas,EDAS會為您重新部署應用以掛載Arthas。如何手動部署應用,請參見步驟4。
- 如果嘗試掛載Arthas失敗,您需要檢查應用的PID:
- PID為1:您需要修改應用的YAML配置文件。具體操作,請參見步驟3。
- PID不為1:您可以在EDAS容器服務K8s和Serverless K8s交流群咨詢。
JVM概覽
JVM概覽支持查看應用的JVM相關信息,包括JVM內存、操作系統信息、變量信息等,幫助您了解JVM的總體情況。
Arthas診斷頁面默認顯示JVM概覽頁簽,您可以在JVM概覽頁簽下查看以下信息:
- JVM內存:JVM內存的相關信息,包括堆內存使用情況、非堆內存使用情況、GC情況等。
- 操作系統信息:操作系統的相關信息,包括平均負載情況,操作系統名稱、操作系統版本、Java版本等。
- 變量信息:變量的相關信息,包括系統變量和環境變量。
- 可選:線程Top-10:CPU使用率排名前10的線程的相關信息,包括名稱、ID、CPU使用率、狀態。
如需查看某個線程的堆棧信息,您可以在某個線程右側的操作列,單擊查看。
線程耗時分析
線程耗時分析支持顯示該應用的所有線程和查看線程的堆棧信息,幫助您快速定位耗時較高的線程。
- 在Arthas診斷頁面,單擊線程耗時分析頁簽。線程耗時分析頁簽下按照CPU使用率降序顯示該應用的所有線程的相關信息,包括線程的名稱、ID、CPU使用率、狀態。
- 如需查看某個線程的堆棧信息,您可以在某個線程右側的操作列,單擊查看。
方法執行分析
方法執行分析支持抓取方法的某一次執行的耗時、入參、返回值等信息和鉆入,幫助您快速定位導致慢調用的根本原因。方法執行分析適用于調用線下無法復現或日志缺失等場景。
- 在Arthas診斷頁面,單擊方法執行分析頁簽。
- 在方法執行分析頁簽下,選擇服務,單擊確定。重要 選擇服務后,EDAS將自動推斷該服務對應到代碼的類和方法,為您自動填寫對應的類和方法。如果推斷失敗,您需要手動填寫該服務對應到代碼的類和方法。方法頁簽下顯示EDAS隨機抓取的該方法的某一次執行的信息,包括方法名、執行耗時、入參、返回值、異常以及該方法的內部方法的信息。該方法的內部方法中執行耗時最高的方法的時間軸標紅顯示。
- 可選:如需鉆入某個內部方法,在其右側操作列,單擊鉆入。方法頁簽下顯示該方法的該次執行信息,包括方法名、執行耗時、入參、返回值、異常以及該方法的內部方法的信息。該方法的內部方法中執行耗時最高的方法的時間軸標紅顯示。
- 如需指定抓取方法的執行的滿足條件,執行以下操作:
- 可選:如需查看方法源碼,在方法頁簽下,單擊查看方法源碼。
如下圖所示,每一次內部方法的執行耗時都會以注釋的方式顯示在源代碼中。該方法的內部方法中執行耗時最高的方法的源代碼標紅顯示。
性能分析
性能分析支持對CPU耗時、內存分配等對象進行一定時間的采樣并生成相應的火焰圖,幫助您快速定位應用的性能瓶頸。
- 在Arthas診斷頁面,單擊性能分析頁簽。
- 在性能分析頁簽下方,單擊新建火焰圖。
- 在新建火焰圖對話框,選擇火焰圖類型,輸入采樣時間,輸入備注信息,然后單擊確認。
參數 描述 示例值 火焰圖類型 采樣對象的類型。取值: - cpu耗時
- 內存分配
- 鎖耗時
- itimer
cpu耗時 輸入采樣時間(單位:秒) 采樣的時長。取值:10~1800。 30 性能分析頁簽下方顯示新建火焰圖的任務信息,包括開始時間、采樣時間、任務執行Pod等。 - 在性能分析頁簽下方,找到任務記錄,在其右側任務狀態,單擊查看火焰圖,根據頁面提示下載SVG格式的火焰圖文件,然后在瀏覽器中打開。