AMP性能监控Javaagent、javassist核心技术

1.javaagent基本使用

什么是javaagent?

javaagent 是java1.5之后引入的特性,其主要作用是在class 被加载之前对其拦截,已插入我们的监听字节码。上篇文章我们说了字节码,字节码插桩技术是个重点也是个难点。必须要学会喔。

javaagent使用说明

AMP性能监控Javaagent、javassist核心技术_第1张图片

构建一个javaagent 示例jar包

org.apache.maven.plugins

maven-jar-plugin

2.2

${project.name}

${project.version}

XXXX

javassist-3.18.1-GA.jar

false

true

1.javassist基本使用

什么是javassist?

Javassist是一个开源的分析、编辑和创建Java字节码的类库。其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成

Javassist 作用?

a. 运行时监控插桩埋点

b. AOP动态代理实现(性能上比Cglib生成的要慢)

c. 获取访问类结构信息:如获取参数名称信息

Javassist使用流程

AMP性能监控Javaagent、javassist核心技术_第2张图片

Javassist简单示例,生成一个简单类

AMP性能监控Javaagent、javassist核心技术_第3张图片

Javassist特殊语法与注意事项说明

AMP性能监控Javaagent、javassist核心技术_第4张图片

与源码不同地方

a) 不能引用在方法中其它地方定义的局部变量

b) 不会对类型进行强制检查:如 int start = System.currentTimeMillis(); 或 String i=”abc”;

c) 使用特殊的项目语法符号

Javassist 时间比较示例代码

(对APM性能监控感兴趣的朋友可以加群一起研究技术问题658706010验证码:头条

Javassist 高级使用完成一个动态代理功能

AMP性能监控Javaagent、javassist核心技术_第5张图片
AMP性能监控Javaagent、javassist核心技术_第6张图片

3. 如何对WEB项目对象进行字节码插桩

1.统一获取HttpRequest请求参数插桩示例

2.获取HttpRequest参数遇到ClassNotFound的问题

3.Tomcat ClassLoader 介绍,及javaagent jar包加载机制

4.通过class 加载沉机制实现在javaagent 引用游jar 包

总结下还有不明白的地方可以回看上面 Javassist 时间比较示例代码 这条一起探讨

你可能感兴趣的:(AMP性能监控Javaagent、javassist核心技术)