周三,天气晴,7度
Java Agent
Java Agent也叫作java探针,可以实现动态修改java字节码,完成额外的功能。在java类编译成字节码,在jvm执行之前,它可以读取修改字节码,以来完成额外的功能。
使用方法:
这里有两种方式指定javaagent:
1)使用命令行:java -javaagent:XXX.jar ddd.jar
2)使用idea的jvm option选项。
应用场景
从静态Instrument-premain()、动态Instrument- agentmain() 字节码转换器的两种执行方式来看,可以实现如下功能:
- Java Agent 能够在加载 Java 字节码之前进行拦截并对字节码进行修改;
- List item在 Jvm 运行期间修改已经加载的字节码;
即可实现:
1.在一些框架或是技术的采集点进行字节码修改,对应用进行监控(比如通过JVM CPU Profiler 从CPU、Memory、Thread、Classes、GC等多个方面对程序进行动态分析)
2.对执行指定方法或接口时做一些额外操作,比如打印日志、打印方法执行时间、采集方法的入参和结果等;
Github 上有哪些开源工具、项目使用到了 Agent 技术:
- 阿里巴巴开源的 Arthas:深受开发者喜爱的Java诊断工具。在线排查问题,无需重启;动态跟踪 Java 代码;实时监控 JVM 状态。
- 阿里巴巴开源的JVM SandBox:实时、无侵入、动态可插拔的字节码增强框架,可用于线上故障定位、系统流控、动态日志等场景
- 国内开源的Skywalking : 针对服务的调用链路、JVM 基础监控信息进行采集。 Uber开源的jvm-profiler:通过 JavaAgent 采集 JVM CPU、Memory、IO等指标并发送给 Kafka、Console 以及可以自定义的发送器。
- sun开源的BTrace:一款java 动态、安全追踪工具,可以不停机的情况下监控线上情况,并且做到最少的侵入,占用最少的系统资源。