`
dwj147258
  • 浏览: 195562 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Arthas源码解析

阅读更多

 Arthas源码解析:

首先是arthas的工程结构:

arthas-agent:javaagent包,需要将此包与被监控程序通过javaagent一起启动,也可以通过虚拟机loadagent来植入增强代码

arthas-boot:arthas启动主程序,arthas推荐的启动方式

arthas-client:telnet连接工程

arthas-client:arthas核心包,里面也有主方法可以启动arthas

arthas-spy:间谍程序,该包由启动类加载器加载,其他工程包由arthas自定义类加载器加载

一、从arthas-core中的Arthas看起:

1.Arthas.java中的主方法是启动方法,会执行到attachAgent(),我们从这个方法看起,这里的configure中有参数为被监控程序的pid

拿到pid后通过VirtualMachine.attach来链接到目标虚拟机

2.连接到虚拟机后判断jdk版本,设置agent包路径,然后通过 virtualMachine.loadAgent(agent包路径, 参数)来远程加载agent,

这里的参数会传到preagent方法中的args中。

二、对目标虚拟机执行loadagent后,目标虚拟机会加载agent程序,通过绝对路径找到arthas-agent包,执行agentmain方法(如果通过-javaagent

参数进行增强,则是执行premain方法),方法最终执行main方法,main方法主要执行了一些初始化工作

1.首先通过传入参数找到agentjar和spyjar,通过Instrumention的appendToBootstrapClassLoaderSearch方法将spyjar加入到被监控程序的

启动类加载器搜索路径中,然后定义自己的类加载器,加载agentjar(这里的agentjar就是arthas-core包)

2.接着初始化间谍程序,通过自定义的classloader找到com.taobao.arthas.core.advisor.AdviceWeaver类,然后获取它的methodOnBegin,

methodOnReturnEnd,methodOnThrowingEnd...等方法,然后将他们植入(赋值)给spy,之后就是新启一个现成来进行绑定操作

3.绑定操作最终执行的是com.taobao.arthas.core.server.ArthasBootstrap的bind方法,首先通过相关的配置,参数对ShellServerImpl进行

初始化,接着设置预置命令BuiltinCommandPack,后面是两种监听方式,一种是telnet,一种是http也就是websocket,最后有一行

//监听

            shellServer.listen(new BindHandler(isBindRef));就是注册监听器了。我们来看telnet的TelnetTermServer中有一个listen方法,这里就是监听命令了

4.最后执行UserStatUtil.arthasStart();这只是一个统计,可以不用管

三、接下来就是监听命令以及处理命令了

1.在 shellServer.listen(new BindHandler(isBindRef))中,可以看到初始化了一个TermServerListenHandler,初始化后赋值给TermServer,

方法内部通过启动一个netty telnet端口来进行监听,Helper.loadKeymap()这个方法主要是在项目目录inputrc文件里加载对应的快捷键以及对应的

处理类name标识,返回个映射对象,对命令行界面快捷键指示处理需要。

2.new TermImpl构造方法中,首先静态对象readlineFunctions是所有的Function接口的子类,Helper.loadServices方法里面的 ServiceLoader.load

其实就是根据META-INF下的Servides文件夹下的文件来读取实现类,接着实现DefaultTermStdinHandler,EventHandler以及对应的赋值,结合term

框架可以对相应的快捷键进行处理

3.回到TermServer.listen方法中,有初始化实例TermServerTermHandler ,启动监听后的termhandler.handle方法,就是该实例的hanle方法,

而该handler中的handle方法执行了handleTerm,这里对session进行了初始化,包括欢迎语,然后readline就是等待用户输入了,

4.当用户输入help时, 最中会调用ShellLineHandler.handle方法,这里做了前置的文件检查及解析,help命令顺利到了createjob这一步,一层层的封装,

然后创建实例化CommandProcess,这里要注意的是,找到command对应的processhandler赋值给ProcessImpl的属性了,这里就埋下伏笔,为后面路由

找到HelpCommand具体流程:createJob() -> createProcess() -> getCommand() 创建完job后,对job启动

这里启动后的执行流程为 job.run() ->   process.run(foreground) ->  ArthasBootstrap.getInstance().execute(task)(这里的task是关键

Runnable task = new CommandProcessTask(process); 最后调用的是CommandProcessTask的run方法) ->handler.handle(process)(这里的handler

是processhandler) -> process() ->instance.process(process)(这里的instance就是具体的命令实现了)

四、详细命令解析

 

 

--后续补充

 

 

 

 

 

 

分享到:
评论

相关推荐

    arthas的源码,如果在github上无法下载的同学可通过我这里下载

    深入学习Arthas源码,可以帮助我们理解其工作原理,提高解决线上问题的能力,同时也可借鉴其设计思路,提升自己的编程技能。对于熟悉Git的同学,可以将源码克隆到本地,进行代码阅读和修改,从而更深入地学习Arthas...

    基于阿里巴巴开源的Java诊断工具Arthas设计源码的解析与应用

    本项目深入解析并应用了阿里巴巴开源的Java诊断工具Arthas的设计源码,涉及1228个文件,涵盖653个Java源文件、159个Markdown文档、151个PNG图片、74个Vue文件、28个XML文件、26个JPG图片、22个JavaScript文件、18个...

    基于Java语言的Arthas诊断工具设计原理与源码解析

    该项目深入解析了基于Java语言的Arthas诊断工具的设计原理,并对其源码进行了详尽分析。项目包含共计463个文件,涵盖268个Java源文件、92个Markdown文档、44个PNG图片、14个XML文件、5个Shell脚本、4个JPG图片、3个...

    arthas-3.1.0源码

    arthas-3.1.0源码,Arthas 是Alibaba开源的Java诊断工具,支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,方便进行问题的定位和诊断

    Arthas(arthas-3.7.1.zip)

    Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等...

    arthas教程详解

    当你遇到以下类似问题而束手无策时, Arthas 可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线...

    idea的arthas插件

    4. **代码热更新**:利用`@update`命令,开发者可以在线修改类的源码,并实时生效,无需重启应用,大大缩短了调试周期。 5. **类与方法的检索**:插件集成了Arthas的`sc`和`find`命令,可以快速查询和定位项目中的...

    基于阿里巴巴的Java诊断工具Arthas设计源码分析

    该项目深入解析了基于阿里巴巴的Java诊断工具Arthas的源码,包含1793个文件,涵盖843个Markdown文档、571个Java源代码文件、128个PNG图片、117个JSON文件、24个XML配置文件、22个JPG图片、17个JavaScript文件、9个...

    Arthas离线安装包-arthas.zip

    在内网环境下执行java -jar arthas-boot.jar 提示某些地址需要连网才可以访问。此时可以使用离线安装的方式。 1. 上传并解压缩 unzip arthas 至环境所需的目录 2. 运行 install-local.sh 安装成功后即可使用

    Arthas基本使用_线上热部署_arthas项目在线诊断_

    **Arthas:线上热部署与项目在线诊断** Arthas是阿里巴巴开源的一款强大的Java诊断工具,它提供了丰富的命令行接口,帮助开发者在不重启应用的情况下进行问题定位、性能分析和资源监控。Arthas的核心功能包括但不...

    arthas-离线版.tar.gz

    Arthas是一款强大的Java诊断工具,由阿里巴巴开源并维护,旨在帮助开发者解决线上问题、进行生产环境调优。离线版的Arthas是专为无法连接到互联网的环境设计的,用户可以在下载后直接在本地使用,无需依赖外部网络。...

    arthas在idea中的插件

    Arthas是一款强大的Java诊断工具,它可以帮助开发者在运行时检查和修改应用程序的状态,而无需重启服务。在IntelliJ IDEA这个流行的Java集成开发环境中,Arthas可以通过插件的形式集成,极大地提升了开发者的问题...

    阿里 arthas 3.1.0 离线文档

    阿里Arthas是一款由阿里巴巴开源的Java诊断工具,它提供了丰富的命令行操作,帮助开发者在不重启服务的情况下,对线上Java应用进行问题定位和诊断。Arthas 3.1.0版本的离线文档包含了官方提供的详细使用指南,便于...

    linux上 arthas 的安装教程

    Linux上的Arthas安装教程详解 Arthas是一款由阿里巴巴开源的Java诊断工具,专为开发者设计,旨在解决生产环境中遇到的Java应用程序故障和性能问题。通过实时监控、丰富的命令行工具、可视化界面以及动态代码修改等...

    arthas-bin.zip 性能检测工具

    Arthas是一款强大的Java诊断工具,它为开发者提供了一系列实用的功能,用于解决生产环境中常见的问题,如:查看方法调用关系、监控系统运行状态、分析内存占用等。这个压缩包"arthas-bin.zip"包含了Arthas的命令行...

    性能监控工具arthas的全量安装使用包

    Arthas是一款强大的Java应用程序诊断和监控工具,由Alibaba开源。它提供了丰富的命令行工具,帮助开发者在运行时分析和解决各种问题。这个压缩包包含Arthas的全量安装文件,允许用户全面地使用其功能。让我们逐一...

    Java诊断利器Arthas排查问题实践.pptx

    Java 诊断利器 Arthas 排查问题实践 Arthas 是 Alibaba 开源的 Java 诊断工具,于 2018 年 9 月开源,目前在 Github 上获得了 11,000 多个星标。 Arthas 的主要功能特性包括查看类加载情况、反编译类、热更新类、...

    arthas-packaging-3.5.0-bin.zip

    Arthas是一款强大的Java诊断工具,由Alibaba开源并维护,它提供了丰富的命令集合,用于帮助开发者在运行时分析和解决各种问题。标题中的"arthas-packaging-3.5.0-bin.zip"指的是Arthas的3.5.0版本的二进制打包文件,...

    arthas,阿里巴巴Java.zip

    通过阅读源码,我们可以学习到如何利用Java的反射、动态代理、ASM字节码操作等技术来实现这样的诊断工具。 总之,Arthas是一个强大且全面的Java诊断工具,它为开发者提供了强大的现场诊断能力,无需重启应用即可...

    阿里Java诊断工具Arthas

    阿里Java诊断工具Arthas是一款由阿里巴巴开源的高效、便捷的命令行工具,它专为了解决Java开发者在日常开发过程中遇到的各种问题而设计。Arthas提供了多种实用功能,如查看类信息、方法调用链、监控内存、分析线程、...

Global site tag (gtag.js) - Google Analytics