拦截运行时java进程--xdubbo agent解读(1) 从Javassist字节码动态注入说起--Dubbo源码系列解读(6)

平常我们玩过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


猜你喜欢

转载自blog.csdn.net/luozhonghua2014/article/details/80566727
今日推荐