阿里在線分析診斷工具Arthas和jvm-sandbox使用demo


1 阿里在線分析診斷工具Arthas(阿爾薩斯)

參考: https://alibaba.github.io/arthas/

參考: https://github.com/alibaba/arthas/blob/master/README_CN.md

2 阿里在線分析診斷工具Jvm-Sandbox(JVM沙盒)

參考: https://github.com/alibaba/jvm-sandbox

3 Arthas與Jvm-Sandbox比較

Arthas就像是一個劍冢,如果你希望得到一把寶劍就進去拿就好了! 它提供了各式各樣的命令可以滿足你的各項業務需求,上手成本較高。

Jvm-Sandbox就像是一個劍爐,其提供了Module的概念,每個Module都是一個AOP的實例,也就是一把劍,怎么樣鍛造取決於工匠,也就是你啦!它提供了模型,具體實現需要你自己編寫,靈活性更高。上手成本相對較低

  • 下面將通過日常碰到的需要添加日志的需求,對兩個開源項目的進行體驗。

4 添加日志案例

項目地址: https://github.com/70416450/Online-debugging-demo

  • 針對springboot-demo項目
  1. 使用 mvn clean install命令編譯
  2. 上傳springboot-demo-1.0-SNAPSHOT.jar包到服務器上
  3. 使用java -jar springboot-demo-1.0-SNAPSHOT.jar啟動項目,看見如下效果

4.1 Jvm-Sandbox體驗

4.1.1 下載解壓

# 下載最新版本的JVM-SANDBOX
wget http://ompc.oss-cn-hangzhou.aliyuncs.com/jvm-sandbox/release/sandbox-stable-bin.zip

# 解壓
unzip sandbox-stable-bin.zip

4.1.2 掛載目標應用

# 進入沙箱執行腳本
cd sandbox/bin

# 常用命令!!!
# 目標JVM進程93726(使用jps命令查看)
./sandbox.sh -p 93726
#卸載沙箱
./sandbox.sh -p 93726 -S
#查詢沙箱
./sandbox.sh -p 93726 -l
#刷新沙箱
./sandbox.sh -p 93726 -F
#使用自定義module執行(my-sandbox-module:自定義的module名字,addLog自定義切入方法名字)
./sandbox.sh -p 93726 -d 'my-sandbox-module/addLog'

#日志配置及查看
#配置文件在    /sandbox/cfg/sandbox-logback.xml
#默認日志路徑    ~/logs/sandbox/sandbox.log

  • 針對springboot-demo項目
  1. 使用 mvn clean compile assembly:single 打包,上傳至sandbox/sandbox-module目錄下
  2. 回到bin目錄,
    • ./sandbox.sh -p 93726 -S 停止沙箱
    • ./sandbox.sh -p 93726 -F 刷新沙箱
    • ./sandbox.sh -p 93726 -l 查看沙箱
    • ./sandbox.sh -p 93726 -d 'my-sandbox-module/addLog' 使用自定義module執行(my-sandbox-module:自定義的module名字,addLog自定義切入方法名字)
  3. 切換到springboot-demo項目日志查看

4.2 Arthas體驗

  • 下載idea插件 Alibaba Cloud Toolkit https://plugins.jetbrains.com/plugin/11386-alibaba-cloud-toolkit/

  • 添加服務器地址並打開Arthas監控

  • 輸入數字選擇對應的進程

  • 啟動成功

  • 通過sc命令查找需要修改的class的ClassLoader

  •  sc -d *TestAdd | grep classLoaderHash
    
  • 修改TestAdd

  • 將重新編譯的class文件上傳至服務器指定目錄

  • 再使用redefine命令重新加載新編譯好的TestAdd.class(注意hash碼和需要替換的類路徑)

  • redefine -c 439f5b3d /usr/local/src/jvm-sandbox/test/TestAdd.class
    
  • 注意點:

    • 重啟項目可以恢復
    • 不允許新增加field/method
    • 正在跑的函數,沒有退出不能生效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM