Java agent从0到1的踩坑过程
发布日期:2022-02-14 16:09:35 浏览次数:44 分类:技术文章

本文共 2581 字,大约阅读时间需要 8 分钟。

文章目录

1. java agent技术简介

在JDK1.5之后,可以使用agent技术构建一个独立于应用程序的代理程序(即Agent)。可以用来协助监测、运行甚至替换其他JVM上的程序。使用它可以实现虚拟机级别的AOP功能。

2. Agent案例

2.1 最简单的Agent案例

2.1.1 代码

基础的demo可以参考:

2.1.2 打包方式

注意:这种打包方式和maven的打包方式是不同的,maven的打包方式可见下文。

在此处进入

生成Build Artifact是在Build->Build Artifact下生成的。
在这里插入图片描述

2.1.3 生成jar包时,需要注意编译的JDK版本。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.2 复杂的Agent案例

目的:AOP装饰线程池的Runnable、Callable类。

2.2.1 配置启动项

启动项的地址为生成jar的绝对地址:

-javaagent:/Users/yexuerui/Documents/veradm/agenttest/out/artifacts/agenttest_jar/agenttest.jar

配置启动项

2.2.2 生成jar包

使用idea去打包

因为修改的是JDK的标准库的类,而标准库的类是由bootstrap class loader类加载器加载的,而上面修改的ThreadPoolExecutor类引用了agent类的代码,所以agent的jar包需要加到boot class path上。即需要去配置MF文件中的Boot-Class-Path

如果不修改,会出现:

在这里插入图片描述
但是仅仅配置Boot-Class-Path: agenttest.jar依旧javassist的类出现NoClassDefFoundError异常。

所以当使用idea进行打包时,需要如下配置MF文件:

Manifest-Version: 1.0Class-Path: spotbugs-annotations-4.1.1.jar jsr305-3.0.2.jar javassist- 3.23.2-GA.jarPremain-Class: com.yyy.agent.demo.agent.TtlAgentCan-Redefine-Classes: trueCan-Set-Native-Method-Prefix: trueBoot-Class-Path: agenttest.jar javassist-3.23.2-GA.jarCan-Retransform-Classes: true

最优的配置是将javassist-3.23.2-GA.jar打入到agenttest.jar中,可以使用下面的maven打包的方式。

使用maven去打包

  1. 配置MF文件,打包的时候,自动生成MF文件配置:
maven-jar-plugin
2.4
com.yyy.agent.demo.agent.TtlAgent
${project.artifactId}-${project.version}.jar
true
true
false
  1. 将javassist的jar包内容打入到生成的jar包中

  1. 将依赖的jar包打包到当前jar包(常规打包是不会将所依赖jar包打进来的);
  2. 对依赖的jar包进行重命名(用于类的隔离);
maven-shade-plugin
3.2.4
shade-when-package
package
shade
javassist
com.yyy.agent.demo.agent.internal.javassist
org.javassist:javassist
true
  1. 生成jar包的命令
mvn clean install

遇到的问题:

在这里插入图片描述

生成jar包的时候,可能会出现这个问题,看上去是网络超时。原因是:连接的公司内网,所以不能进行下载。解决方案就是使用手机热点进行下载。

  1. 最终生成的jar包
    在这里插入图片描述

3. 推荐阅读

转载地址:https://blog.csdn.net/qq_29595463/article/details/108058181 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【SpringBoot2.x-3】使用Redis的bitmap实现布隆过滤器(Guava中BF算法)
下一篇:【RabbitMQ-2】RabbitMQ的并发参数(concurrency和prefetch)

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月28日 18时37分43秒