Java Agent(上)

2021-05-05 07:28

阅读:666

标签:是什么   实现   情况下   ips   第一步   npoi   jrebel   artifact   有一个   

1、java agent是什么?

---》对用户透明,不侵入用户业务代码。让java虚拟机加载agent jar

2、java agent有什么用?

--->应用场景例如:调用链追踪项目,在用户无感知的情况下,记录日志。目前业内使用该技术的有,SkyWalking,Pinpoint(这个监控的粒度更小)

-各个 Java IDE 的调试功能,例如 eclipse、IntelliJ ;

-热部署功能,例如 JRebel、XRebel、 spring-loaded;

-各种线上诊断工具,例如 Btrace、Greys,还有阿里的 Arthas;

-各种性能分析工具,例如 Visual VM、JConsole 等

3、java agent的实现原理?

https://zhuanlan.zhihu.com/p/147375268

4、 入门案例

4.1、 如何制造自己第一个java agent jar包

4.1.1、 第一步:我们需要一个插件来帮助我们生成带特定格式的MAINIFEST.MF的jar

4.1.2、 第二步:在启动项目的时候,在jvm参数中添加 -javaagent: *\ving-agent-0.0.1-SNAPSHOT.jar (在jvm上先加载agent包)

(偷偷地问)特定格式的MAINIFEST.MF是怎样的?需要包括下面的内容

Manifest-Version: 1.0
Can-Redefine-Classes: true
Can-Retransform-Classes: true
Premain-Class: cn.think.in.java.clazz.loader.asm.agent.PreMainTraceAgent

(再偷偷地问),难度每次都让我手动去弄这个文件,我觉得很麻烦呀,有没一个工具能帮我们将agent项目打包成包含MAINIFEST.MF的jar?
-----》对,你猜对了,真的有这个工具。那就是maven插件。(说到打包,肯定要想到maven或者gradle了吧)

            org.apache.maven.plugins
                maven-jar-plugin
                2.2${project.name}${project.version}com.tuling.agent.Agenttruetruejavassist-3.18.1-GA.jartrue

插件
技术图片

打包之后
技术图片

测试
技术图片
技术图片
技术图片
技术图片

问题二:如果有一个类已经被虚拟机加载了,那么我们的agent包里面的逻辑就不能加载这个类。但是我就是想把这类替换掉,怎么办呢?(热更新,虚拟机不停的情况下,替换成用户最新的代码)

插件
技术图片

agent代码的修改
技术图片

重新打包
技术图片

测试
技术图片

技术图片

技术图片

技术图片

Java Agent(上)

标签:是什么   实现   情况下   ips   第一步   npoi   jrebel   artifact   有一个   

原文地址:https://www.cnblogs.com/vingLiu/p/13193148.html

上一篇:Spring Boot

下一篇:javaSprintBoot技术总结


评论


亲,登录后才可以留言!