如果你有以下痛點,請你查看本文章:
1姥宝、我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit恐疲?分支搞錯了腊满?
2、遇到問題無法在線上 debug培己,難道只能通過加日志再重新發(fā)布嗎碳蛋?
3、線上遇到某個用戶的數(shù)據(jù)處理有問題省咨,但線上同樣無法 debug肃弟,線下無法重現(xiàn)!
4零蓉、是否有一個全局視角來查看系統(tǒng)的運行狀況笤受?
5、有什么辦法可以監(jiān)控到JVM的實時運行狀態(tài)敌蜂?
6箩兽、怎么快速定位應(yīng)用的熱點,生成火焰圖章喉?
Arthas-解決以上所有問題
一汗贫、快速啟動身坐,(我的第一給demo)
1、下載git代碼落包,本地啟動app應(yīng)用
演示的源碼
package com.eujian.arthaslearn.controller;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping
@RestController
public class ArthasController {
@GetMapping("/arthasGet")
public String arthasGet(String a,String b){
System.out.println("arthasGet");
System.out.println(String.format("a=%s,b=%s",a,b));
return a;
}
@GetMapping("/arthasTrace")
public String arthasTrace() throws InterruptedException {
Thread.sleep(100);
new MyService().send();
return "arthasTrace";
}
@PostMapping("/arthasInvote")
public ObjectNode arthasInvote(@RequestBody ObjectNode objectNode){
System.out.println("arthasInvote");
System.out.println(String.format("objectNode=%s",objectNode));
return objectNode;
}
}
package com.eujian.arthaslearn.controller;
public class MyService {
public String send(){
System.out.println("send被調(diào)用了");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "send";
}
}
github地址:https://github.com/hd-eujian/arthas-learn.git
gitlab地址:https://gitee.com/guoeryyj/arthas-learn.git
啟動應(yīng)用
java -jar ./target/arthas-learn-1.0.0.jar
2部蛇、下載arthas的jar包(linux命令)
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
選擇1然后回車
3、 查看dashboard
輸入dashboard咐蝇,按回車/enter
涯鲁,會展示當前進程的信息,按ctrl+c
可以中斷執(zhí)行嘹害。
4撮竿、通過thread命令來獲取到app線程
通過thread 2
獲取線程id為2的線程
5、通過jad來反編譯Main Class
jad com.eujian.arthaslearn.controller.ArthasController
6笔呀、watch某個函數(shù)的入?yún)⒑统鰠?br>
輸入命令watch com.eujian.arthaslearn.controller.ArthasController arthasGet '{params[0],params[1],returnObj}'
用來監(jiān)聽ArthasController這個類的arthasGet方法
訪問接口 curl localhost:8085/arthasGet?a=heetget\&b=saas
監(jiān)聽結(jié)果
7幢踏、trace命令 輸出方法路徑上的每個節(jié)點上耗時
輸入 trace com.eujian.arthaslearn.controller.ArthasController arthasTrace
另外另個終端輸入curl localhost:8085/arthasTrace