标签:是什么 实现 情况下 ips 第一步 npoi jrebel artifact 有一个
---》对用户透明,不侵入用户业务代码。让java虚拟机加载agent jar
--->应用场景例如:调用链追踪项目,在用户无感知的情况下,记录日志。目前业内使用该技术的有,SkyWalking,Pinpoint(这个监控的粒度更小)
-各个 Java IDE 的调试功能,例如 eclipse、IntelliJ ;
-热部署功能,例如 JRebel、XRebel、 spring-loaded;
-各种线上诊断工具,例如 Btrace、Greys,还有阿里的 Arthas;
-各种性能分析工具,例如 Visual VM、JConsole 等
(偷偷地问)特定格式的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了吧)
<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>com.tuling.agent.Agent</Premain-Class>
<Can-Redefine-Classes>true</Can-Redefine-Classes>
<Can-Retransform-Classes>true</Can-Retransform-Classes>
<Boot-Class-Path>javassist-3.18.1-GA.jar</Boot-Class-Path>
</manifestEntries>
</archive>
<skip>true</skip>
</configuration>
</plugin>
插件
打包之后
测试
问题二:如果有一个类已经被虚拟机加载了,那么我们的agent包里面的逻辑就不能加载这个类。但是我就是想把这类替换掉,怎么办呢?(热更新,虚拟机不停的情况下,替换成用户最新的代码)
插件
agent代码的修改
重新打包
测试
标签:是什么 实现 情况下 ips 第一步 npoi jrebel artifact 有一个
原文地址:https://www.cnblogs.com/vingLiu/p/13193148.html