之前介绍过 BTrace, 线上问题排查神器 BTrace 的使用 https://mp.weixin.qq.com/s/4vYFLVJWufJyNNuWrmDT2A , 也说它是线上问题排查神器. 都是神器, 但今天这个也很厉害, 是不是更厉害不好说, 但是使用起来非常简单. 如果你用 BTrace 的话, 需要事先写好探测脚本, 然后上传到需要排查问题的服务器, 然后执行命令. 比方说获取某个方法的参数, 返回值, 异常等. 而 Athas 方便在不用写脚本, 直接用命令行方式就可以, 使用它就好像在用安装在服务器上的各种工具一样, 比如 top,jps,jmap 等.
他们背后的逻辑都是字节码修改, 如果你想了解, 可以读一读这篇 Java 调试工具, 热部署, JVM 监控工具都用到了它 https://mp.weixin.qq.com/s/9xn9Ht4WO0Et_V7ZclsX_Q
夸了半天, Arthas 到底有什么神奇的呢, 有什么功效呢. 以下是摘自官方的介绍.
Arthas 是 Alibaba 开源的 Java 诊断工具, 深受开发者喜爱.
当你遇到以下类似问题而束手无策时, Arthas 可以帮助你解决:
这个类从哪个 jar 包加载的?
为什么会报各种类相关的 Exception?
我改的代码为什么没有执行到? 难道是我没 commit? 分支搞错了?
遇到问题无法在线上 debug, 难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题, 但线上同样无法 debug, 线下无法重现!
是否有一个全局视角来查看系统的运行状况?
有什么办法可以监控到 JVM 的实时运行状态?
Arthas 支持 JDK 6+, 支持 Linux/Mac/Winodws, 采用命令行交互模式, 同时提供丰富的 Tab 自动补全功能, 进一步方便进行问题的定位和诊断.
看到上面的介绍是不是有种发现新大陆的感觉, 恨不得拍拍大腿. 心里在想, 要是早知道它, 之前就不用为了一个诡异的线上 bug 重复发包打日志了.
不管你现在用不用得上, 都请记住它吧, 相信我, 迟早会用的上的.
安装与启动
先远程到目标服务器上, 然后执行以下命令安装并运行
- wget https://alibaba.github.io/arthas/arthas-boot.jar
- java -jar arthas-boot.jar
然后 Arthas 会列出当前服务器上的所有 Java 进程.
- Arthas fengzheng$ java -jar arthas-boot.jar
- [INFO] arthas-boot version: 3.1.1
- [INFO] Found existing java process, please choose one and hit RETURN.
- * [1]: 95301 org.kite.CmApplication
- [2]: 95300 org.jetbrains.jps.cmdline.Launcher
- [3]: 87737 org.kite.WdApplication
比如你想检查 org.kite.WdApplication 这个应用的问题, 那么输入数字 3 回车, 会出现如下提示, 并开始正式与目标应用交互.
正式交互开始, 就到了大展拳脚的时候了, 线上出现的问题基本上都可以找到合适的命令.
下面简单的介绍几个, 就是为了演示一下使用方式.
- monitor
- ## 监控 MonitorController 类下的 overview 方法
- monitor -c 5 kite.springcloud.jxm.controller.MonitorController overview
- ## 监控 kite.springcloud.jxm.service package 下所有了类的所有方法 * 是通配符 也可以是正则表达式
- monitor -c 60 kite.springcloud.jxm.service.* *
-c 为执行周期, 默认 120 秒, 例如 -c 5 表示 5 秒钟输出一次,-c 60 表示 60 秒输出一次.
- watch
- ## 方法执行前 打印参数
- watch kite.springcloud.jxm.service.MonitorDashboardService buildJvmInfo "{params}" -b -n 1
- ## 方法返回后 打印返回值
- watch kite.springcloud.jxm.service.MonitorDashboardService buildJvmInfo "{returnObj}" -s -n 1
- ## 方法返回后 打印所在的 ClassLoader, 所在的类, 调用实例
- watch kite.springcloud.jxm.service.MonitorDashboardService buildJvmInfo "{loader,clazz,target}" -s -n 1
- ## 打印耗时超过 200ms 方法的参数和返回值
- watch kite.springcloud.jxm.service.MonitorDashboardService * '{params, returnObj}' '#cost>200'
- trace
方法内部调用路径, 并输出方法路径上的每个节点上耗时
- trace kite.springcloud.jxm.controller.MonitorController overview
- # 多个类 模拟实现多穿链路 trace
- trace -E kite.springcloud.jxm.controller.MonitorController|kite.springcloud.jxm.service.MonitorDashboardService overview
- stack
输出当前方法被调用的调用路径
- stack kite.springcloud.jxm.controller.MonitorController overview
- stack kite.springcloud.jxm.service.MonitorDashboardService overview -n 1
详细的命令介绍直接看官方文档 https://alibaba.github.io/arthas/quick-start.html 吧 .
另外, 无论是 Arthas 还是 BTrace , 都是用来排查单机服务问题的, 也就是应用内部的代码, 性能问题, 如果要排查不同服务之间的调用问题, 那就是另一个维度上的事儿了. 就需要 APM 的帮助了.
不要吝惜你的「推荐」呦
来源: https://www.cnblogs.com/fengzheng/p/11538456.html