arthas整体执行流程

arthas可以理解为由server, client, spy三大模块组成

整体执行流程

  1. 启动arthas server,利用JVMTI技术(参考:当我们谈Debug时,我们在谈什么(Debug实现原理)),在运行时attach到jvm进程上

  2. arthas server异步调用bind方法,该方法最终启动server监听线程,监听arthas客户端的连接,包括telnet和websocket两种通信方式

  3. 启动arthas client,请求时,从本地System.in读取,发送到 telnet.getOutputStream(),即发送给远程服务端

  4. arthas server接收到客户端请求

  5. 如果是exit,logout,quit,jobs,fg,bg,kill等直接执行。

  6. 如果是不需要使用字节码增强的命令,比如监控相关命令,类加载命令,arthas就是通过mbean获取的。

    每个java应用均包含一个平台MBean Server,即java.lang.management.ManagementFactory.getPlatformMBeanServer()方法返回对象。

  7. 比如监控方法运行命令,是需要字节码增强的命令,那么服务端就使用ASM字节码提升,从而就能够获取到比如执行时间之类的信息了

    服务端是以任务的形式在后台跑任务(意思就是非阻塞的,后台采样数据),植入的代码随着任务的中止而不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何Arthas命令不会引起原有业务逻辑的改变。

  8. arthas从telnet.getInputStream()读取远程服务端发送过来的响应,并传递给consoleReader.getOutput(),即在本地控制台输出。

参考:阿里监控诊断工具 Arthas 源码原理分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值