网易二面-Arthas的底层原理
众所周知,阿里开源的Arthas已经成为Java开发中调优的基本工具,其功能在于监控JVM运行情况,并对CPU、内存状况生成报告或者是火炬图。
从JDK5开始,java.lang.instrument可以使用Instrumentation构建一个独立于应用程序的代理程序(agent),用来监测运行在 JVM 上的其他进程,甚至替换和修改某些类的定义,这是一种虚拟机级别的 AOP (动态代理模式)。一开始,JDK只支持在类运行之前对类进行增强,通过java -javaagent参数指定代理类的方式。利用代理类(agent),在目标运行类被加载之前,通过修改二进制字节码的形式对目标类进行增强。至于什么类被增强,得看agent是否对类进行了判断,如果没有判断那任何类都会被增强。
VM启动前设置Instrument例子:https://blog.csdn.net/chuixue24/article/details/103829931
此处作者编写了两个类输出1和2,在agent中加载了2的字节码文件(为一个byte数组)对1的字节码在类加载前进行了替换。

JDK6以后,Instrumentation类进一步的有了agentmain方法,允许在一个类运行时对其增强。然后sun公司提供了com.sun.tools.attach包,这个包在JDK的lib文件夹的tools.jar内。
使用attach可以向目标JVM attach一个agent,然后方便的监控一个 JVM,运行一个外加的代理程序。

也就是说它的运行时增强也是改写class文件然后重新加载JVM内的类实现的。
attach操作系统层面实现使用了套接字:http://lovestblog.cn/blog/2014/06/18/jvm-attach/?spm=ata.13261165.0.0.26d52428n8NoAy

使用ASM重写字节码:https://www.cnblogs.com/chengxuzhixin/p/14552275.html
网易二面-Arthas的底层原理的更多相关文章
- 【T-SQL进阶】02.理解SQL查询的底层原理
本系列[T-SQL]主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础]04.表表达式 ...
- 理解SQL查询的底层原理
阅读目录 一.SQL Server组成部分 二.查询的底层原理 本系列[T-SQL]主要是针对T-SQL的总结. T-SQL基础 [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- Synchronized之二:synchronized的实现原理
Java提供了synchronized关键字来支持内在锁.Synchronized关键字可以放在方法的前面.对象的前面.类的前面. 当线程调用同步方法时,它自动获得这个方法所在对象的内在锁,并且方法返 ...
- SQL 执行 底层原理(一)
一.SQL Server组成部分 1.关系引擎:主要作用是优化和执行查询.包含三大组件: (1)命令解析器:检查语法和转换查询树. (2)查询执行器:优化查询. (3)查询优化器:负责执行查询. 2. ...
- java面试-CAS底层原理
一.CAS是什么? 比较并交换,它是一条CPU并发原语. CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B.当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什 ...
- WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇]
原文:WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇] 在[上篇]中,我们分别站在消息交换和编程的角度介绍了SOAP Fault和FaultException异常.在服务执行过 ...
- 深入源码分析SpringMVC底层原理(二)
原文链接:深入源码分析SpringMVC底层原理(二) 文章目录 深入分析SpringMVC请求处理过程 1. DispatcherServlet处理请求 1.1 寻找Handler 1.2 没有找到 ...
- 【Spring Data JPA篇】JPA的底层原理(二)
一.接口继承结构 二.底层原理
- iOS 技术篇:从使用到了解block底层原理 (二)
block实质 序言 上篇文章中主要通过简单的demo展示了block的使用场景,本篇将基于上篇文章iOS 技术篇:从使用到了解block底层原理 (一)进一步了解block底层的实现原理. bloc ...
- JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能
摘要: 理解浏览器渲染. 原文:JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是专门探索 J ...
随机推荐
- C# VS2019修改工程名
1.修改解决方案的名称:选择解决方案的名称,右键重命名即可 2.修改项目名称,方法同上,不再赘述 3.修改项目的程序集名称和默认命名空间:选择项目,右键属性,弹出如下对话框 4.替换项目或解决方案中的 ...
- Element--->>>最新骨架屏Skeleton使用
首先,Element在最近的一次更新中(时间:2021-06-29) 新增了Skeleton骨架屏组件.Empty空状态组件. 那么在使用其自带组件Skeleton时,应将按照如下步骤使用: Ⅰ:如果 ...
- 【vscode】linux下vscode的使用
注1:vscode在查看project时,非常好用,可以导入整个project并查看其中文件,通过插件的安装还可以实现跳转到当前函数定义处的功能; 注2:可以了解下source insight; 补充 ...
- ubuntu20.04系统中扩展swap分区
1.首先停止/swapfile #swapon /swapfile 2.删除以前的/swapfile #rm -rf swapfile 3.创建新的/swapfile(以2G为例) #dd if=/d ...
- PyTables 教程(二)多维表单元格和自动健全性检查,使用链接更方便地访问节点
翻译自http://www.pytables.org/usersguide/tutorials.html 多维表单元格和自动健全性检查 现在是一个更真实的例子(即代码中有错误)的时候了.我们将创建两个 ...
- ComPiler200002:Growing a Compiler
http://www.cs.dartmouth.edu/~mckeeman/cs48/mxcom/gem/html/GrowingCompiler.html by Bill McKeeman and ...
- react backend and frontend download file
import { View as ViewFile} from '@/api/SafetyRule'; const Handler_DownLoadFile = (Id:number,IsEngli ...
- Jenkins自动化部署nodejs项目(前端项目)
1.安装nodejs插件 2.Linux系统安装nodejs (1)去nodejs官网下载最新包 https://nodejs.org/dist/latest/ (2)解压安装 tar xvzf no ...
- Pycharm实现sqlite数据库可视化
- SAP 布局编辑器无法使用问题处理
因一些事情,公司将正式系统的数据拷贝到了开发机,后来在开发中用到了布局编辑器,发现打不开且会报错RFC callback call rejected by whitelist 这个是因为正式机和开发机 ...