JVMTI Agent在中间件领域的应用
如果无法正常显示,请先停止浏览器的去广告插件。
1. JVMTI Agent在中间件
领域的应用
童子龙/ 腾讯云专家工程师
2.
3. About Me
•
•
•
•
•
童子龙(leoziltong)
腾讯云专家工程师
腾讯云Femas开源社区负责人
腾讯云微服务平台TSF核心研发
GitHubId:@zilongTong
Tencent opensource Member
4. 大纲
•
•
•
•
•
从字节码到 JVMTI
Agent 原理介绍
Agent 在性能监控领域的应用
Agent 在 Service Mesh ProxyLess 领域的应用
Agent 在腾讯云的现状和最佳实践
5. 字节码结构简介
•
•
•
•
•
•
•
•
•
magicNumber
version
Constant_pool
Access_flag
Interfaces
Fields
Methods
Attributes
... ...
6. Functions of JvmTI
• 加载class文件之前,修改字节码
• 运行时修改已经加载的类字节码
• 添加jar到BootstrapClassloader中加载
• 添加jar到SystemClassLoader中加载
• 获取已经被加载过的类
• ... ...
7. 常见应用场景
• 加密class文件
• debug Java程序
• 应用性能分析、profile诊断
• APM全链路性能监控
• 业务应用无感知、无侵入代理
• 热加载Class类
• ... ...
8. JvmTI premain
9. JvmTI agentmain
10. Agent的优势
• 轻成本接入,方便大规模业务集群升级
• 解耦业务应用,能力透明化下沉,关注点分离
• 性能优于proxy sidecar
• 能力可插拔,无厂商依赖
• ......
11. 腾讯云agent的一些现状
• 基础能力下沉,业务聚焦应用开发
• 框架易用性封装,降低学习和维护成本
• 精细的流量治理、数据面轻量化
• 多维度应用性能分析,能力标准化、平台化
• 信息丰富的全链路tracing、Metrics
12. 性能分析
• 进程的内存信息
• 进程的线程信息
• Jmx Metrics
• method profile
• JVM 进程火焰图
• GC 日志分析
• ......
13. 如何打造基于agent的性能分析平台
• 业务层接入agent开启通信端口
• 平台层下发指令
14. 如何打造基于agent的性能分析平台
• 自研基于sdk的cpu profile
• method profile transformer
15. APM概览
16. Apm探针
• 全链路调用栈
• 探针采样率
• 自定义Tag:显示系统和业务自定的标签
• Rpc调用信息:client-server通信时延
• 中间件链路信息:MQ、gateway、database
• 调用链与业务日志联动
17. 基于Java agent的proxyLess Mesh
18. 腾讯云Service Mesh现状
• 治理数据面:proxy、proxyLess模式多元
化数据面。
• 平台控制面:统一的控制面标准协议,一
套治理协议,多数据面下发
19. 腾讯云微服务标准化
20. 治理SPEC-circuit breaker
21. 治理SPEC-RateLimit
22. 治理SPEC-Route
23. 治理SPEC- Auth
24. 治理SPEC-全链路灰度
25. service agent治理数据面
• 一个agent包同时支持多微服务协议
• springcloud E\F\G\2020
• dubbo 2.x\3.x
• 微服务生命周期插装
• 治理能力标准化、插件化
26. service agent治理架构最佳实践
agent starter
• premain入口
• 解析要加载的plugin配置
• Instrumentation定向添加transformer
agent tools
• 日志处理
• 反射工具类,提升性能
agent core
• plugin yaml解析器
• 不同微服务框架clossloader隔离
• spi classloader
• 实例方法、静态方法、构造方法插装template
agent plugin
• 微服务代理插件
agent jts
• 性能分析平台,多功能agent集成到one agent
• -javaagent:/path/agent.jar=targetJar=
协议名/应用jar path
• ├── femas-agent
│ ├── femas-agent-core
│ ├── femas-agent-example
│ ├── femas-agent-plugin
│ ├── femas-agent-starter
│ └── femas-agent-tools
│ └── femas-agent-jts
•
•
•
•
•
•
27. agent解决跨线程传递
修改原生线程类
• Runnable
• Callable
• TimerTask
修改原生JDK线程池
• java.util.concurrent.ThreadPoolExecutor
• java.util.concurrent.ScheduledThreadPoolExecutor
• java.util.concurrent.ForkJoinTask
• java.util.Timer
28. 运行时字节码可观测
• 自研字节码实时监控工具
• java -jar extractor.jar pid classFile
• dump运行时字节码,Paas平台观测运行实况
29. 浅谈内核探针 - eBPF
30.
31.
32. About eBPF
优势:
• 去sidecar,性能提升
• 节省资源
• 有效减少memory copy
劣势
• 内核级的事件驱动,对代码安全性有诸多限制
• L7层处理困难
33. 加入Femas社区
34.
35.