相关文章推荐
英姿勃勃的葡萄  ·  成功解决TypeError: ...·  3 月前    · 
神勇威武的鸵鸟  ·  Azure SQL Synapse ...·  1 年前    · 
很拉风的小狗  ·  C# 运算符 | 菜鸟教程·  1 年前    · 

instrument的底层实现依赖于JVMTI(JVM Tool Interface),它是JVM暴露出来的一些供用户扩展的接口集合,JVMTI是基于事件驱动的,JVM每执行到一定的逻辑就会调用一些事件的回调接口(如果有的话),这些接口可以供开发者去扩展自己的逻辑。JVMTIAgent是一个利用JVMTI暴露出来的接口提供了代理启动时加载(agent on load)、代理通过attach形式加载(agent on attach)和代理卸载(agent on unload)功能的动态库。而instrument agent可以理解为一类JVMTIAgent动态库,别名是JPLISAgent(Java Programming Language Instrumentation Services Agent);
里面的类其实没几个,主要是调用了C的源码,所以源码就不介绍了;底层使用sokcet进行进程通讯;

Instrumentation提供了两种使用方式

使用方法查看这篇博客

第一种是通过JVM启动参数的形式: -javaagent(也就是单独建立一个项目编写好代码之后打成jar包供另一个使用程序通过代理形式引入.),启动时处理

一般我们会命名premain函数处理

使用方法查看这篇博客

第二种与第一种有些相似,但它是运行是处理;不需要通过启动参数,通过attach工具激活知道代理即可

一般我们会命名agentmain函数处理
                                    基础 Java 检测
启动一个基本的检测代理,它将提供 JVM 中特定方法的计时。 将使用当前的 Splunk API 将数据推送到 Splunk。
 大量借用 Damien Dallimore 的 SplunkJavaAgent(嗯,它会),利用 SplunkLogEvent 和一些传输内容将数据导入 Splunk。 主要区别将是
用于连接到 Splunk 并发送数据的 Splunk API
 代理将通过应用程序从 Splunk 中提取配置详细信息
                                    Java Instrumentation笔记
Java SE 6新特性:Instrumentation,利用 Java 代码,即 java.lang.instrument 做动态 InstrumentationJava SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之可以用 Java 代码的方式解决问题。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 操作了,这样的特性实际上提供了一种虚拟机级别支持的 AOP 实现方式,使得开发者无需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了。
适用于Java的OpenTelemetry Instrumentation
该项目提供了Java代理JAR,该Java代理JAR可以附加到任何Java 8+应用程序,并动态注入字节码以捕获来自许多流行的库和框架的遥测。 您可以采用多种格式导出遥测数据。 您还可以通过命令行参数或环境变量来配置代理和导出器。 最终结果是无需更改代码即可从Java应用程序收集遥测数据的能力。
 该软件包包括检测代理以及所有受支持的库和所有可用数据导出器的检测。 该软件包提供了一种全自动的,即开即用的体验。
 使用JVM的-javaagent标志启用检测代理java -javaagent:path/to/opentelemetry-javaagent-all.jar \
     -jar myapp.jar
默认情况下,OpenTelemetry Java代理使用程序,该
                                    什么是Instrumentationjava Instrumentation指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序。这种监测和协助包括但不限于获取JVM运行时状态,替换和修改定义等。 Java SE5中使用JVM TI替代了JVM PI和JVM DI。提供一套代理机制,支持独立于JVM应用程序之外的程序以代理的方式连接和访问JVMjava.lang.instrument是在JVM TI的基础上提供的Java版本的实现。 Instrumentatio
                                    文章目录1、JVMTI 介绍1.1 Agent的工作形式1.2 JDPA 相关介绍2、Instrumention 机制2.1 Instrumention支持的功能2.2 基于Instrumention开发一个Agent2.2.1 编写premain函数2.2.2 打成jar包2.2.3 编写测试2.3 如何在运行时加载agent3、参考资料
1、JVMTI 介绍
JVMTI(JVM Tool I...
                                    文章目录前言一、Instrumentation1.addTransformer(ClassFileTransformer transformer, boolean canRetransform)2.addTransformer(ClassFileTransformer transformer)3.removeTransformer(ClassFileTransformer transformer)4.isRetransformClassesSupported()5.retransformClasses(C
                                    Java Agent 简介
Java 代理 (agent) 是在你的main方法前的一个拦截器 (interceptor),也就是在main方法执行之前,执行agent的代码。
agent 的代码与你的main方法在同一个JVM中运行,并被同一个system classloader装载,被同一的安全策略 (security policy) 和上下文 (context) 所管理。
Java...
想必不少人听说过javaagent,但是很少人听说Instrumentation,其实Instrumentation就是javaagent的实现机制,说到Instrumentation,就必须想了解java的attach机制,那就先说下attach的实现。
         大家进行jstack的时候,是不是经常看到两个线程Signal Dispatcher和 Attach Liste...
                                    Instrumentation 简介
利用 Java 代码,即 java.lang.instrument 做动态 InstrumentationJava SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之可以用 Java 代码的方式解决问题。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助...
                                    使用 Insrumentation ,开发者而言构建一个独立于应用程序的代理程序(Agent),检车和协助运行在JVM 上的程序,甚至可以替换和修改某些的定义。简单的来说 开发者使用Instrumentation 可以实现一种虚拟机级别的AOP实现。
Instrumentation 的最大作用,就是定义动态改变和操作。 程序运行时,通过 -javaagent 参数指定一个特定的 ...