全部版块 我的主页
论坛 数据科学与人工智能 IT基础 JAVA语言开发
1560 0
2018-06-19
APM监控一:javaAgent以及javassistjavaAgent

javaAgent本质上是一种动态代理,它是通过字节码注入的方式,形成字节码转换器,在程序运行前,或者在程序运行时,修改代码字节码,然后载入类加载器,做到对代码的修改以及代理。

静态导入

在jvm加载原jar前,运行javaagent指定的premain方法,一般会在premain里面操作字节码,在方法前后加入代码,起到监控的作用

通过classPool和loader获取所有类池的类,然后通过类名获取类,然后通过类获取方法,在对其前后添加代码,或者添加属性,注解等。

动态导入

项目已经启动了,可以通过使用它的进程id,强行修改它的字节码,agent包需要声明Agent-Class,会调用agentmain方法,这个时候可以重新加载类

javassist

Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态"AOP"框架。

可以强行改方法代码。

两者关系

一般两者通过结合使用,前者在侵入代码前生成字节码转换器,后者替换字节码,实现对程序无侵入性的监控。

注意:一定要知道代码的内部结构,要不没法改。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群