阿爾薩斯原理解析

iarthas

前陣子對阿爾薩斯的原理進行一點探究,對它的原理總結整理如下:通過仿寫一個簡易版的阿爾薩斯,來加深對它的認識。

i_arthas 是模仿阿里開源的阿爾薩斯寫的小工具。整體技術上採用 Java agent 對字節碼的加載進 行攔截干涉,利用 ASM/ASM Byte Viewer 實現目標類字節碼的加強,通過 Java attach 實現不同 虛擬機進程間的通信,做到了虛擬機層面上的 AOP。

整體實現了簡易版的 redefine(熱替換)、 watch(方法監控)、trace(方法鏈路追蹤)、timeTunnel(流量採集與回放)等功能。

代碼上傳至github : https://github.com/CallMeJiaGu/iarthas

實現思路

阿爾薩斯 原理探究 仿寫arthas-TimeTunnel 流量採集

阿爾薩斯 原理探究 仿寫arthas-watch

阿爾薩斯 原理探究 仿寫arthas-trace

阿爾薩斯 原理探究 仿寫arthas-redefine

阿爾薩斯 原理探究 asm再認識(轉載)

阿爾薩斯 原理探究 agentmain實踐

阿爾薩斯 原理探究 premain實踐

阿爾薩斯 原理探究 預備知識

阿爾薩斯 原理探究 初體驗(轉載)

大體效果

timetunnel 流量採集:

2
1
-------------------
開始採集方法:doAdd

2
開始採集方法:doDelet

1
-------------------

watch 方法監控

4
1
-------------------
監控當前方法:doAdd
 入參:
       參數類型-- int@1
       參數類型-- String@abc
       參數類型-- long@11
       參數類型-- Lagent/Job;@agent.Job@7adf9f5f
       參數類型-- Lagent/Main;@agent.Main@85ede7b
       參數類型-- [email protected]
 出參:
       參數類型-- int@4
4
1
-------------------

trace 方法子調用鏈路追蹤

3
1
-------------------
doAdd
-|javalangThread@sleep
--|method  Cost: 1000.0282599999999 ms
-|agentJob@test
--|method  Cost: 1000.0648309999999 ms
almost time cost:
--|method  Cost: 2005.3643539999998 ms
3
1
-------------------

redefine 熱加載

Hello World!
Bye Bye
-------------------
Hello World!
Bye Bye
-------------------
Hello World!
Bye Bye
fix good Bye!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章