Java黑科技之源:JVMTI完全解读

news/2024/11/30 1:42:22/

        Java生态中有一些非常规的技术,它们能达到一些特别的效果。这些技术的实现原理不去深究的话一般并不是广为人知。这种技术通常被称为黑科技。而这些黑科技中的绝大部分底层都是通过JVMTI实现的。

       形象地说,JVMTI是Java虚拟机提供的一整套后门。通过这套后门可以对虚拟机方方面面进行监控,分析。甚至干预虚拟机的运行。

       下面先介绍下哪些黑科技是通过JVMTI实现的,再详细的介绍JVMTI。

 


JVMTI可以用来实现哪些黑科技

  1. 使用JVMTI对class文件加密

    有时一些涉及到关键技术的class文件或者jar包我们不希望对外暴露,因而需要进行加密。使用一些常规的手段(例如使用混淆器或者自定义类加载器)来对class文件进行加密很容易被反编译。反编译后的代码虽然增加了阅读的难度,但花费一些功夫也是可以读懂的。使用JVMTI我们可以将解密的代码封装成.dll,或.so 文件。这些文件想要反编译就很麻烦了,另外还能加壳。解密代码不能被破解,从而也就保护了我们想要加密的class文件。


  2. 使用JVMTI实现应用性能监控(APM)

    在微服务大行其道的环境下,分布式系统的逻辑结构变得越来越复杂。这给系统性能分析和问题定位带来了非常大的挑战。基于JVMTI的APM能够解决分布式架构和微服务带来的监控和运维上的挑战。APM通过汇聚业务系统各处理环节的实时数据,分析业务系统各事务处理的交易路径和处理时间,实现对应用的全链路性能监测。开源的Pinpoint, ZipKin, Hawkular,商业的AppDynamics,OneAPM,Google Dapper等都是个中好手。


  3. 产品运行时错误监测及调试

    想要看生产环境的异常,最原始的方式是登录到生产环境的机器查看日志。稍微高级一点的方式是通过日志监控或者APM等工具将异常采集上来。但是这些手段都有许多明显的缺点。首先,不是所有的异常都会被打印到日志中,有些异常可能被代码吃掉了;其次,打印异常的时候通常只有异常堆栈信息,异常发生时上下文的变量值很难获取到(除非有经验的程序员将其打印出来了),而这些信息对定位异常的原因至关重要。基于JVMTI可以开发出一款工具来时事监控生产环境的异常。这方面有一款成熟的商业软件OverOps,其有三个主要的功能:1. 采集到所有的异常,包括try catch之后没有打印出来的异常;2. 可以采集到异常发生时上下文所有变量的值;3. 可以将异常发生的堆栈对应的源代码采集展示出来,从而在一个系统上就可以看代码定位问题,不需要打开ide调试源代码。


  4. JAVA程序的调试(debug)。

    一般JAVA的IDE都自带了调试工具。例如Eclipse的调试器相信大部分人都使用过。它的调试器org.eclipse.jdt.debug插件底层就是调用的JVMTI来实现的。不仅如此,随着服务云化的发展,google甚至推出了云端调试工具cloud debugger。它时一个web应用,可以直接对生产环境进行远程调试,不需要重启或者中断服务。阿里也有类似的工具Zdebugger。


  5. JAVA程序的诊断(profile)。

    当出现cpu使用率过高、线程死锁等问题时,需要使用一些JAVA性能剖析或者诊断工具来分析具体的原因。例如Alibaba开源的Java诊断工具Arthas,深受开发者喜爱。Arthas的功能十分强大,它可以查看或者动态修改某个变量的值、统计某个方法调用链上的耗时、拦截方法前后,打印参数值和返回值,以及异常信息等。


  6. 热加载

    热加载指的是在不重启虚拟机的情况下重新加载一些class。热加载可以使本地调试代码非常节省时间,不用每次更新代码都重启一边程序。同时,在一线不方便重启的线上环境也能派上用场。这方面的代表产品有商业产品JRebel等。JRebel能够对应用中的任何class起作用。

 


JVMTI是什么

 

  1. JVMTI的定义及原理

    在介绍JVMTI之前,需要先了解下Java平台调试体系JPDA(Java PlatformDebugger Architecture)。它是Java虚拟机为调试和监控虚拟机专门提供的一套接口。如下图所示,JPDA被抽象为三层实现。其中JVMTI就是JVM对外暴露的接口。JDI是实现了JDWP通信协议的客户端,调试器通过它和JVM中被调试程序通信。

          JVMTI 本质上是在JVM内部的许多事件进行了埋点。通过这些埋点可以给外部提供当前上下文的一些信息。甚至可以接受外部的命令来改变下一步的动作。外部程序一般利用C/C++实现一个JVMTIAgent,在Agent里面注册一些JVM事件的回调。当事件发生时JVMTI调用这些回调方法。Agent可以在回调方法里面实现自己的逻辑。JVMTIAgent是以动态链接库的形式被虚拟机加载的。



    640?wx_fmt=png



  2. JVMTI的历史

    JVMTI 的前身是JVMDI(Java Virtual Machine Profiler Interface) 和 JVMPI(Java Virtual Machine Debug Interface),它们原来分别被用于提供调试 Java 程序以及 Java 程序调节性能的功能。在 J2SE 5.0 之后 JDK 取代了JVMDI 和 JVMPI 这两套接口,JVMDI 在最新的 Java SE 6 中已经不提供支持,而 JVMPI 也计划在 Java SE 7 后被彻底取代。


  3. JVMTI的功能

    JVMTI处于整个JPDA 体系的最底层,所有调试功能本质上都需要通过 JVMTI 来提供。从大的方面来说,JVMTI 提供了可用于 debug 和profiler 的接口;同时,在 Java 5/6 中,虚拟机接口也增加了监听(Monitoring),线程分析(Thread analysis)以及覆盖率分析(Coverage Analysis)等功能。从小的方面来说包含了虚拟机中线程、内存、堆、栈、类、方法、变量,事件、定时器处理等等诸多功能。具体可以参考oracle 的文档:https://docs.oracle.com/javase/1.5.0/docs/guide/jvmti/jvmti.html。通过这些接口,开发人员不仅可以调试在该虚拟机上运行的 Java 程序,还能查看它们运行的状态,设置回调函数,控制某些环境变量,从而优化程序性能。


  4. JVMTI的实现

    JVMTI 并不一定在所有的 Java 虚拟机上都有实现,不同的虚拟机的实现也不尽相同。不过在一些主流的虚拟机中,比如 Sun 和 IBM,以及一些开源的如Apache Harmony DRLVM 中,都提供了标准 JVMTI 实现。

 

 

参考:

  1. https://docs.oracle.com/javase/1.5.0/docs/guide/jvmti/jvmti.html

  2. https://www.ibm.com/developerworks/cn/java/j-lo-jpda2/

  3. http://blog.caoxudong.info/blog/2017/12/07/jvmti_reference

  4. http://lovestblog.cn/blog/2015/09/14/javaagent/

  5. https://www.jianshu.com/p/e59c4eed44a2

 

 

 



http://www.ppmy.cn/news/774181.html

相关文章

【时间之外】2021年这些伪黑科技概念要提防

现在有些人喜欢玩概念,不做#时间的朋友#,下面简单梳理一下2021年需要提防的伪黑科技概念,无论是就业还是投资,都需要了解一下。 目录 1、AR/VR虚拟现实 2、智能音箱 3、挖孔手机屏 4、智能眼镜 5、有线充电器 6、高清电视盒…

盘点 | 2017年,哪些黑科技改变了我们的生活?

时光如梭,一眨眼的功夫2017 年还剩个尾巴,虽然年初自己许下的愿望还完成几个,但这个世界,过去一年很多事儿,让人拍案叫绝。比如以 AlphaGo、 机器人索菲亚为代表的人工智能,还有无人驾驶、无人超市、人脸识…

到数博会看“2017十大黑科技”

这界数博会一个很有意思的点就是“黑科技“众多,为此组委会还专门评选出了“2017十大黑科技”。那么问题来了,到底什么是黑科技呢,怎样才能算是黑科技?这界数博会都有哪些黑科技?这些黑科技又“黑“在哪呢?为此,我们对这次的“…

CSS.黑科技

1、利用 CSS 的 content 属性 attr 抓取资料

CES Asia 2017:国内厂商大秀黑科技Hold住全场

科客点评:虽然传统老牌厂商产品阵容庞大,黑科技轮番轰炸让人目不暇接,但不少中国企业带来的产品却让人眼前大亮,叹为观止。 当众人的关注点还在苹果WWDC 2017的时候,另外一场盛会也如火如荼地进行中。那就是CES Asia 2017(亚洲消费电子展)。与拉斯维加斯的CES展会最大的…

python好玩的黑科技_用Python玩微信跳一跳黑科技详细使用教程

2017年的小尾巴上,微信推出了小游戏,其中跳一跳火遍大江南北,咱们可爱的程序猿哥哥直接用Python写了个自动跳一跳的程序,github地址:https://github.com/wangshub/wechat_jump_game 因为跳一跳实在是太火了&#xff0…

缺氧游戏黑科技计算机,缺氧实用黑科技研究分享

缺氧实用黑科技研究分享 2017-07-18 来源:游侠 作者:未知 缺氧随着温度与植物机制变化,生存变得越来越不易,而在游戏中除了常规的玩法之外,还有些实用的黑科技能帮大家轻松生存,今天小编就为大家带来玩家“…

《黑科技》

border"0" width"330" height"86" src"//music.163.com/outchain/player?type3&id908142315&auto0&height66"> 【 随着医学领域的发展,人类活到一二百岁,甚至更长,并非遥不可及。】…