Javassist埋点做性能监控

本文介绍了如何使用JavaAgent技术配合Javassist进行无侵入的性能监控。通过动态插入字节码,可以在不修改原有系统代码的情况下,在方法前后埋点以获取执行时间。详细讲解了JavaAgent的基本步骤,包括premain函数的编写,jar文件的打包配置,以及在目标项目中设置vm参数进行监控。通过示例项目JAgent和JAgentTest的运行,展示了埋点的开始和结束,实现了对方法执行时间的追踪。
摘要由CSDN通过智能技术生成

埋点实现在方法前后动态插入代码,获取方法的执行时间。

常见的方法有以下3钟:

1 硬编码  

2 spirng aop 动态代理

3  动态插入字节码

其中 1 和 2 系统代码侵入性大,方法3不用更改系统代码。

 javaAgent技术

JavaAgent是从JDK1.5及以后引入的,在1.5之前无法使用,也可以叫做java代理。利用 java代理,即 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之可以用 Java 代码的方式解决问题。

使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作了,这样的特性实际上提供了一种虚拟机级别支持的 AOP 实现方式,使得开发者无需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了。在 Java SE 6 里面,instrumentation 包被赋予了更强大的功能:启动后的 instrument、本地代码(native code)instrument,以及动态改变 classpath 等等。这些改变,意味着 Java 具有了更强的动态控制、解释能力,它使得 Java 语言变得更加灵活多变。Instrumentation 的最大作用,就是类定义动态改变和操作。

开发者可以在一个普通 Java 程序(带有 main 函数的 Java 类)运行时,通过 -javaagent参数指定一个特定的 jar 文件(包含 Instrumentation 代理)来启动 Instrumentation 的代理程序。开发者可以让 Instrumentation 代理在 main 函数运行前执行premain函数。

基本步骤:

1  编写premian函数

2  将监控程序打包jar,META-INF/MAINIFEST.MF 必须包含 Premain-Class

3  使用java -javaagent:jar 文件的位置 [= 传入 premain 的参数 ]运行被监控的程序

新建项目JAgent 

1 增加pom依赖

<dependency>
    <groupId>jboss</groupId>
    <artifactId>javassist</artifactId>
    <version>3.8.0.GA</version>
</dependency>

2 编写permian函数

import javassist.*;

import java.io.IOException;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
import java.security.ProtectionDomain;


public class JAgent {

    public static void main(String[] args) {
        System.out.println("main");
    }

    /**
     * 在这个 premain 函数中,开发者可以进行对类的各种操作。
     * @param agentOps
     </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值