Arthas与Jarboot的源码实现对比

原创
2021/07/01 23:08
阅读数 1.7K

首先,Arthas是一个优秀的Java诊断利器,能够线上诊断Java进程的异常。Jarboot是一个Java进程的启动器,可以方便的启动一个Java进程,并且附带了一部分的调试命令。Jarboot的调试命令大部分与Arthas中的重合,实现的代码逻辑也是借鉴了Arthas的源码。

应用场景

Jarboot是一个进程启动器,Arthas是一个纯粹的诊断工具,二者的功能定位不同,JVM诊断的功能只是Jarboot中的一部分附带功能,它的主流功能是管理Java服务文件、启动进程、停止进程、监控进程状态、依赖(优先级)启动及停止、进程的守护、进程的优雅退出等等。

架构对比

二者都是通过Java Agent技术Attach到目标进程后再使用ASM技术进行类增强;

Arthas将调试的进程作为了一个服务端,然后可以通过telnet和Web的方式连接该服务;

Jarboot则反过来将目标进程作为一个客户端,让它通过WebSocket协议连接jarboot-server;

Modules
┏━━━━━━━━━━━━━━━━━┓
┃    Browser      ┃          ┏━━━━━━━━━━━━━━━━━┓
┗━━━━━━━━┯━━━━━━━━┛    ╭—————┨ jarboot-agent   ┠——————————————╮
     http│websocket    │     ┗━━━━━━━━━━━━━━━━━┛              │JarbootClassLoader
         │             │                                      │
         ↓             ↓                                      ↓
┏━━━━━━━━━━━━━━━━━┓ attach   ┏━━━━━━━━━━━━━━━━━┓      ┏━━━━━━━━━━━━━━━━━┓
┃ jarboot-server  ┠—————————→┃ target process  ┠—————→┃ jarboot-core    ┃←————╮
┗━━━━━━━━━━━━━━━━━┛          ┗━━━━━━━━━━━━━━━━━┛      ┗━━━━━━━━┯━━━━━━━━┛     │
         ↑                                                     │              │
         ╰—————————————————————————————————————————————————————╯              │
              http and websocket connect to jarboot-service                   │
                                                      ┏━━━━━━━━━━━━━━━━━┓     │
                                                      ┃   jarboot-spy   ┠—————╯
                                                      ┗━━━━━━━━━━━━━━━━━┛ 


Command execute
                                                 websocket
┏━━━━━━━━━━━━━━━━━┓  websocket ┏━━━━━━━━━━━━━━━━━┓ send   ┏━━━━━━━━━━━━━━━━━━━━━━━┓
┃    Browser      ┃←——————————→┃ jarboot-service ┠———————→┃    target process     ┃
┗━━━━━━━━━━━━━━━━━┛ send/recv  ┗━━━━━━━━━━━━━━━━━┛        ┃   ╭——————————————╮    ┃
                                       ↑                  ┃   │  user code   │    ┃
                                       │                  ┃   ╰——————————————╯    ┃
                                  http │ websocket        ┃   ╭——————————————╮    ┃
                                       ╰——————————————————┃———┥ jarboot-core │    ┃
                                       result back        ┃   ╰——————————————╯    ┃
                                                          ┗━━━━━━━━━━━━━━━━━━━━━━━┛

分析:

1、从影响的侵入性来看,Jarboot的侵入性相对较小,不会在目标进程占用端口,不会开辟大量的线程资源;

2、从响应的速度来看,Arthas相对快些,Jarboot由于是将目标进程作为了客户端,所以它的执行结果反馈是通过了jarboot-service的中转,经历了两次WebSocket通讯才来到前端显示,但是这种毫秒级的差距人的眼睛也分辨不出来,所以影响不是很大;

ui界面

Arthas支持telnet的控制台界面和通过WebSocket推送的Web界面;

Jarboot仅支持Web界面和HTTP接口,界面采用React技术前后端分离策略;

Jarboot的UI界面在可操作性和可维护性上较好。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
1 收藏
0
分享
返回顶部
顶部