拦截运行时java进程--xdubbo agent解读(1)

平常我们玩过jvisualvm监控java进程信息就知道,jvisualvm虽然说是jdk自带的,但如果我们自己要监控和替换某些java进程呢?我们如何玩?

根据作者目前的认知,介绍下jdk tools工具如何搬弄运行时java进程的

随便一个需求

运行java某进程正在跑一个用户,跑出的结果是格式:firstName.lastName    现在要将这个进程的结果改变,跑出 lastName.firstName


我们如何做?

先看下流程图吧



具体做法

先做一个agent包

1、先定义User


2、写个agent


3、跑主进程



4、定义jar 包的MANIFEST.MF



5、定义jar 打包pom坐标


这里注意了,要将tools.jar设置pom 否则会报错([ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project xdubbo-agent: Compilation failure: Compilation failure:
[ERROR] \springboot\sharding-share-work\xdubbo\xdubbo-agent\src\main\java\com\xdubbo\utils\JVMProcess.java:[3,0] ����: �����sun.jvmstat.monitor������
[ERROR] \springboot\sharding-share-work\xdubbo\xdubbo-agent\src\main\java\com\xdubbo\utils\JVMProcess.java:[26,12] ����: �Ҳ�������
[ERROR] \springboot\sharding-share-work\xdubbo\xdubbo-agent\src\main\java\com\xdubbo\utils\JVMProcess.java:[26,34] ����: �Ҳ�������
[ERROR] \springboot\sharding-share-work\xdubbo\xdubbo-agent\src\main\java\com\xdubbo\utils\JVMProcess.java:[31,16] ����: �Ҳ�������
[ERROR] \springboot\sharding-share-work\xdubbo\xdubbo-agent\src\main\java\com\xdubbo\utils\JVMProcess.java:[31,58] ����: �Ҳ�������
[ERROR] \springboot\sharding-share-work\xdubbo\xdubbo-agent\src\main\java\com\xdubbo\utils\JVMProcess.java:[33,37] ����: �Ҳ�������),无法编译

<dependency>
    <groupId>com.sun</groupId>
    <artifactId>tools</artifactId>
    <version>1.8</version>
    <scope>system</scope>
    <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>

 

6查看jar


ok agent包已做好


再做个测试工具或叫client吧

1,重定义User,用来替换运行时进程的User



2,写个测试类


这里注意了要将tools.jar导入到idea或eclipse


否则会报:

com.sun.tools.attach.VirtualMachine:no providers installed


好了,我们现在开测

java -jar 你的agent.jar


运行client你要注入或监控或替代的jar



其实这个玩法是很有用的,后续做监控或做别的处理,做到零侵入的,当然还有字节码的玩法比如:

从Javassist字节码动态注入说起--Dubbo源码系列解读(6) 


源码:https://github.com/luozhonghua/xdubbo


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luozhonghua2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值