线上诊断神器之Arthas图文学习笔记

Arthas是什么

你以为如下图
在这里插入图片描述

其实这里的Arthas如下图
在这里插入图片描述

实际上Arthas:

  • 是一个命令行工具
  • 通常是一个通过java启动的jar包
  • 大量运用字节码等黑科技直接读取甚至控制对应的java进程的工具

Arthas主要解决的问题

  • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  • 是否有一个全局视角来查看系统的运行状况?
  • 有什么办法可以监控到JVM的实时运行状态?
  • 怎么快速定位应用的热点,生成火焰图?

总得来说特别适合

线上&性能&线下难复现的BUG排查

典型场景

现象

软件CPU占用率异常居高不下

操作

1.登录生产服务器
2.将arthas-boot.jar复制到生产服务器
3.java -jar 启动
4.查看整体情况

dashboard

在这里插入图片描述
5.寻找热点线程

thread –i 3000 –n 5

在这里插入图片描述
也可以通过下面脚本寻找入口

thread 1 | grep 'main'

6.反编译查看源码进一步定位,

jad --source-only com.wangji92.arthas.plugin.demo.controller.CommonController 

这样你就基本可以知道大体情况
7. 通过monitor来对可以代码行进行统计

monitor com.wangji92.arthas.plugin.demo.controller.CommonController add -n 10 --cycle 10

在这里插入图片描述
8. 查看是否被调用了,参数和返回值,异常

watch com.wangji92.arthas.plugin.demo.controller.CommonController * '{params,returnObj,throwExp}' -n 5 -x 3

在这里插入图片描述
9.查看调用链情况

trace com.wangji92.arthas.plugin.demo.controller.CommonController getRandomInteger -n 10

在这里插入图片描述

  1. 必要的时候进行堆栈分析
heapdump 1.hprof

mat分析dump

Arthas的一些问题

  1. 门槛较高,需要使用较为复杂的参数或语法糖,你真的需要一个小本本来记录常用的语法
  2. 功能太强,有风险,由于Arthas直接运行于生产服务器,且基于字节码等技术,完全可以绕过各种安全机制,直接操作软件内部参数和方法,一旦操作失误将很难处理,而且从外部还看不出来问题
  3. 运行于生产服务器,要挤占服务器资源
    当然Arthas仍然是应该是挽救你发量的有效工具,你总不希望,紧急时刻面对着软件日志,全靠猜出了什么问题吧。

参考

  1. https://github.com/alibaba/arthas/issues?q=label%3Auser-case
  2. https://alibaba.github.io/arthas/
原创文章 155 获赞 81 访问量 22万+

猜你喜欢

转载自blog.csdn.net/zhaoenweiex/article/details/105689185