JVMTI Agent在中间件领域的应用
字节码结构简介
字节码结构包括magicNumber、version、Constant_pool、Access_flag、Interfaces、Fields、Methods、Attributes等组成部分。
JvmTI功能
JvmTI可加载class文件之前修改字节码、运行时修改已加载的类字节码、添加jar到BootstrapClassloader或SystemClassLoader中、获取已加载的类等。
常见应用场景
包括加密class文件、debug Java程序、应用性能分析、APM全链路性能监控、业务应用无感知代理、热加载Class类等。
JvmTI premain与agentmain
JvmTI通过premain和agentmain两种方式启动agent。
Agent的优势
Agent具有轻成本接入、解耦业务应用、性能优于proxy sidecar、能力可插拔、无厂商依赖等优势。
腾讯云agent现状
腾讯云agent基础能力下沉,业务聚焦应用开发,框架易用性封装,降低学习和维护成本,实现精细流量治理、数据面轻量化,多维度应用性能分析,能力标准化、平台化,信息丰富的全链路tracing、Metrics。
性能分析
包括进程内存信息、线程信息、Jmx Metrics、method profile、JVM进程火焰图、GC日志分析等。
如何打造基于agent的性能分析平台
业务层接入agent开启通信端口,平台层下发指令,自研基于sdk的cpu profile、method profile transformer。
APM概览
APM探针可提供全链路调用栈、探针采样率、自定义Tag、Rpc调用信息、中间件链路信息、调用链与业务日志联动等功能。
基于Java agent的proxyLess Mesh
腾讯云Service Mesh治理数据面采用proxy和proxyLess模式,平台控制面采用统一控制面标准协议,一套治理协议,多数据面下发。
腾讯云微服务标准化
治理SPEC包括circuit breaker、RateLimit、Route、Auth、全链路灰度等。
service agent治理数据面
一个agent包支持多微服务协议(如springcloud E/F/G/2020、dubbo 2.x/3.x),实现微服务生命周期插装,治理能力标准化、插件化。
service agent治理架构最佳实践
通过-javaagent:/path/agent.jar=targetJar=协议名/应用jar path配置,包括agent starter、agent tools、agent core、agent plugin、agent jts等组件。
agent解决跨线程传递
通过修改原生线程类(Runnable、Callable、TimerTask)、原生JDK线程池(ThreadPoolExecutor、ScheduledThreadPoolExecutor、ForkJoinTask、Timer)实现跨线程传递。
运行时字节码可观测
自研字节码实时监控工具,通过java -jar extractor.jar pid classFile dump运行时字节码,实现PaaS平台观测运行实况。
浅谈内核探针 - eBPF
eBPF优势包括去sidecar、性能提升、节省资源、有效减少memory copy;劣势包括内核级事件驱动、对代码安全性限制多、L7层处理困难。
加入Femas社区