首页 > 数据库技术 > 详细

jvm-sandbox对运行中的java执行文件做插桩

时间:2020-03-29 20:27:28      阅读:322      评论:0      收藏:0      [点我收藏+]

jvm-sandbox  github地址:

https://github.com/alibaba/jvm-sandbox/wiki/INSTALL

jvm-sandbox是java执行文件的插桩工具,可以对运行中的java执行文件进行插桩,修改或记录运行的数据。

原理参考github的原理图,根据JVMTI,对jvm进程进行修改。

 

 

步骤:

1.运行java文件

这里写了一个除0异常

public class MathMethod {
    //省略getter setter...
    public Integer testException() throws ArithmeticException{
        return x/y;
    }

  

 

public class TestJvmSandbox {
public static void main(String[] args) {

MathMethod mm = new MathMethod(100, 0);
while (true) {
System.out.println(mm.add());
System.out.println(mm.millace());
System.out.println(mm.testException());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("byebye");
}
}
}

  

2.安装jvm-sandbox

 

wget http://ompc.oss-cn-hangzhou.aliyuncs.com/jvm-sandbox/release/sandbox-stable-bin.zip
unzip sandbox-stable-bin.zip

  

3.编写jvm-sandbox执行jar包

{

        new EventWatchBuilder(moduleEventWatcher)
                .onClass("com.patech.MathMethod")
                .onBehavior("repairMathException")
                .onWatch(new AdviceListener() {
                    /**
                     * 拦截{@code com.patech.TestJvmSandbox#testException()}方法,当这个方法抛出异常时将会被
                     * AdviceListener#afterThrowing()所拦截
                     */
                    @Override
                    protected void afterThrowing(Advice advice) throws Throwable {

                        // 在此,你可以通过ProcessController来改变原有方法的执行流程
                        // 这里的代码意义是:改变原方法抛出异常的行为,变更为立即返回;void返回值用null表示
                        ProcessController.returnImmediately("不可除0");
                    }
                });
    }

  

jar包cp到sandbox-module目录下

4.将sandbox执行jar包挂载到运行中的java进程中

查看java进程的jvm中的进程编号

jps -ml

 

在sandbox中挂载jar包 

./sandbox.sh -p [jvm进程编号]
./sandbox.sh -p [jvm进程编号] -l
#如果jar包挂载没有成功,-S shutdown -R 重启

  

执行jar包的插桩命令

./sandbox.sh -p 21729 -d "broken-math-repair/repairMathException"

  

 

5.观察问题解决的情况

 技术分享图片

 

MathMethod 

jvm-sandbox对运行中的java执行文件做插桩

原文:https://www.cnblogs.com/zhizhiyin/p/12592627.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!