別再擔心線上 Java 業務出問題怎麼辦了,Arthas
幫助你解決以下常見問題:
Arthas(阿爾薩斯)是一款線上監控診斷產品,通過全域性視角實時檢視應用 load、記憶體、gc、執行緒的狀態資訊,並能在不修改應用程式碼的情況下,對業務問題進行診斷,包括檢視方法呼叫的出入參、異常,監測方法執行耗時,類載入資訊等,大大提升線上問題排查效率。
Arthas 採用命令列互動模式,同時提供豐富的 Tab
自動補全功能,進一步方便進行問題的定位和診斷。
同時 Arthas 也支援通過 Web Console 進入命令列互動模式,這適用於開發人員沒有伺服器許可權時通過 Arthas Web Console 診斷業務。
1. 外掛整合
通過 Rainbond 外掛的機制,從 Rainbond 開源應用商店一鍵安裝 Arthas 外掛並在元件中開通,元件啟動時會自動下載 arthas-agent.jar
結合環境變數設定使用 javaagent
方式啟動。
2. Arthas Tunnel 整合
當我們的微服務業務有 10+,這時通過 Arthas 去診斷就會比較麻煩,開發人員沒有伺服器的許可權並且通過 Web Console 存取的話也會由於存取地址太多導致特別混亂。這時就需要通過 Arthas Tunnel Server/Client 來遠端管理/連線多個 Agent。
Arthas Agent 會通過 WS 註冊到 Arthas Tunnel 中,實現統一管理。
Arthas Tunnel 可通過 Rainbond 開源應用商店一鍵安裝。
3. Arthas Web Console
對於 Spring Boot 應用則無需通過 Arthas Tunnel 存取 Web Console,在元件內新增8563埠即可存取 Web Console。(注意:域名存取需開啟 Websocket 支援
本小節使用若依SpringBoot作為範例。
首先需要安裝 Rainbond雲原生應用管理平臺,可參閱檔案 安裝 Rainbond Allinone
團隊 -> 新增 -> 基於應用商店建立元件 -> 在應用商店中搜尋 若依SpringBoot
進行一鍵部署。
2.1 安裝外掛
團隊 -> 外掛 -> 從應用商店安裝外掛 -> 在應用商店中搜尋 Arthas-Agent
進行一鍵部署。
2.2 開通外掛
為ruoyi-admin
開通 Arthas Agent 外掛,在元件內 -> 外掛 -> 未開通 -> 開通外掛。
2.3 環境變數設定
為 ruoyi-admin
元件設定環境變數,在元件內 -> 環境變數 -> 新增變數。
變數名 | 變數值 |
---|---|
JAVA_OPTS | -javaagent:/arthas/arthas-agent.jar |
ARTHAS_APP_NAME | ruoyi-admin |
ARTHAS_AGENT_ID | ruoyi-admin |
2.4 新增埠並更新
為 ruoyi-admin
元件新增 8563 埠並開啟對外服務,更新元件完成後可通過預設域名存取 Web Console。
使用 Arthas 診斷部署在 Rainbond 上的微服務 Spring Cloud Pig,並通過 Arthas Tunnel 統一管理 Arthas agent。本小節將使用 Spring Cloud Pig 作為範例。
首先需要安裝 Rainbond雲原生應用管理平臺,可參閱檔案 安裝 Rainbond Allinone
團隊 -> 新增 -> 基於應用商店建立元件 -> 在應用商店中搜尋 SpringCloud-Pig
進行一鍵部署。
團隊 -> 新增 -> 基於應用商店建立元件 -> 在應用商店中搜尋 Arthas-Tunnel
進行一鍵部署。
1. 安裝外掛
團隊 -> 外掛 -> 從應用商店安裝外掛 -> 在應用商店中搜尋 Arthas-Agent
進行一鍵部署。
2. 開通外掛
為每個微服務元件都開通外掛,進入微服務元件 -> 外掛 -> 開通外掛 Arthas-Agent
。
3. 設定環境變數
為每個微服務元件設定環境變數,在元件內 -> 環境變數 -> 新增變數。
變數名 | 變數值 | 說明 |
---|---|---|
JAVA_OPTS | -javaagent:/arthas/arthas-agent.jar | JAVA 啟動引數 |
ARTHAS_APP_NAME | register | arthas app name,根據實際情況修改 |
ARTHAS_AGENT_ID | register | arthas agent ID 不可與其他 ID相同,是唯一的 |
4. 設定依賴關係
將所有微服務元件依賴至 arthas tunnel
,應用檢視切換到編排模式進行拖拉拽。
5. 批次更新
更新/重啟所有微服務相關元件。可在 列表
中批次操作。
1.可通過 Arthas Tunnel 8080 埠預設生成的域名存取 Web Console。
2.在 Web Console 中的 IP:PORT 填寫 Arthas Tunnel 7777 的對外伺服器埠,7777 埠是 Agent 連線到 Tunnel 的。所以在通過 Web 遠端連線到其他服務時修改 AgentId 即可連線
Arthas 採用命令列互動模式,同時提供豐富的 Tab
自動補全功能,進一步方便進行問題的定位和診斷,以下是部分命令,詳細請參閱檔案 Arthas命令列表
以下是部分命令的使用截圖:
profiler
命令支援生成應用熱點的火焰圖。本質上是通過不斷的取樣,然後把收集到的取樣結果生成火焰圖。
以下命令均在Arthas Tunnel Web Console 中執行。
1.啟動 profiler
$ profiler start
Started [cpu] profiling
2.停止 profiler 並生成火焰圖
預設情況下,結果檔案是html
格式,也可以用--format
引數指定:
$ profiler stop --format html
OK
profiler output file: /app/arthas-output/20220907-214802.html
3.通過瀏覽器檢視火焰圖
上一步生成的 html 檔案在指定的微服務元件中,所以需要在該微服務元件中檢視火焰圖。
進入到該微服務元件中,例如:pig-auth,在元件埠中新增 3658
埠並開啟對外服務並存取 http://domain/arthas-output
Arthas 是款非常好的 Java 診斷工具,而在 Kubernetes 中使用較為複雜。Rainbond 底層基於 Kubernetes,在此之上抽象了應用模型,使使用者更方便的在 Kubernets 中部署管理應用,並且通過 Rainbond 的外掛機制讓使用者更便捷的使用 Arthas 診斷業務,降低了在 Kubernetes 中使用 Arthas 的門檻,使用者只需關注業務。