你是否在你的项目中遇到过如下问题:
- 线程block掉了,但是不知道是哪个线程阻塞了
- 线上出了问题,想加日志排查,但是线上是不能随便修改代码发布的
- 项目的一些方法,耗时比较久,怎么确定是哪块逻辑耗时比较长
arthas就是针对各种不方便的情况对线上问题排查的这么一个工具。
一、arthas工作原理
那么你们可能好奇了Arthas是如何实现如此强大的功能的,说到这个就不得不提JDK5开始提供的高级特性了,那就是Java Instrumentation.
- 利用java.lang.instrument(容器类) 做动态 Instrumentation(执行容器) 是 JDK5 的新特性。
- 使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。这个功能为虚拟机监控提供了支撑。
- 使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作了&