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

1.javaagent基本使用

什么是javaagent?

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

javaagent使用说明

构建一个javaagent 示例jar包

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-jar-plugin</artifactId>

<version>2.2</version>

<configuration>

<archive>

<manifestEntries>

<Project-name>${project.name}</Project-name>

<Project-version>${project.version}</Project-version>

<Premain-Class>XXXX</Premain-Class>

<Boot-Class-Path>javassist-3.18.1-GA.jar</Boot-Class-Path>

<Can-Redefine-Classes>false</Can-Redefine-Classes>

</manifestEntries>

</archive>

<skip>true</skip>

</configuration>

</plugin>

</plugins>

</build>

1.javassist基本使用

什么是javassist?

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

Javassist 作用?

a. 运行时监控插桩埋点

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

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

Javassist使用流程

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

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

与源码不同地方

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

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

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

Javassist 时间比较示例代码

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值