利用 Java Agent 和 Instrument 技术录制线上流量
在做性能压测的时候,需要先准备好压测请求数据,可以采用人工制造的方式,也可以在线上录制流量,线下回放。这里,我们使用 Java Agent 和 Instrument 技术,做了一个代理 Agent 实现了不修改代码即可录制线上请求数据的功能。
Java Instrument 技术
Java Instrument 技术怎么用这里就不重复了,网上文章很多,可以看看这篇:Java SE 6 新特性 Instrumentation 新功能。
遇到的难题
下面我们讲一下在开发 Agent 过程中遇到的难题。
自动打包依赖
录制 Agent 依赖的一些包,也要一同打包,否则在加载代理执行时会出现找不到类的问题。具体怎么做呢?可以在 pmo.xml 加上下面的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<!-- manifestEntries 用于配置打包生成 MANIFEST.MF 文件所需的描述信息,如果不配置下面的内容,JVM 会找不

本文介绍如何利用Java Agent和Instrument技术无侵入地录制线上HTTP请求数据,解决在开发过程中遇到的自动打包依赖、ClassNotFound问题以及HttpServletRequest body只能get一次的挑战。通过拆分Agent和数据收集类,利用URLClassLoader的addURL接口,成功让Recorder访问HttpServletRequest,同时在读取body后重新构造HttpServletRequest以供后续处理。
最低0.47元/天 解锁文章
1363

被折叠的 条评论
为什么被折叠?



