Arthas 体验

2021-01-21

聊聊阿里的 Java 诊断工具 —— Arthas。

https://arthas.aliyun.com/doc/quick-start.html

官方文档里的指令,基本都在测试环境跑了,线上我做了自动化脚本进行加强。教程的类就不写了,一来网上很多;二来官网的文档已经写的足够好,而且 issues 里还有用户提供的很多案例。其实教程我也记录了,放公司 bbs 里,涉及环境信息就不发链接了。

 

重点分享几点感触:

  • 现在但凡问我 JVM 相关问题的,我都让把《深入理解 Java 虚拟机》看三遍再来。无它,这本书非常适合入门,处理 JVM 问题要求对各部分理论掌握很熟,对应的知识联系不起来,遇到隐蔽问题基本查不出问题在哪。

  • 启动 Arthas 时,它探测到的 JVM 进程只有 pid 和启动类信息,如果一个类启动了多个实例,基本就无法分辨了。所以启动之前,我加了 ps 进程信息的脚本,提取了想要的 -D 开头的 Java 进程启动参数与 pid 对应关系,辅助选择 Java 进程 pid 的 index。

  • 我们服务是通过 weblogic 发布的,大部分现场环境使用了 JRockit JDK 1.6,有些也有 Oracle JDK 1.7 启动的 server。试了一下,JRockit JDK 1.6 启动的 Arthas 监听 Oracle JDK 1.7 的 server,执行各种指令没有任何问题。从这方面看,还是很强大了。

  • 说几点它的功能。这玩意有些非常实用的功能,比如可以实时监听获取到 JVM 中指定类的指定方法被调用时的入参和返回值;可以获取类的静态变量的当前值;有 dashboard,可以看到线程占用 cpu 从高到低、整体内存的使用情况(堆、非堆、直接内存等)、运行时环境信息;统计方法执行耗时;获取线程调用栈、dump 堆栈更是不在话下了;内置 jad,可以实时反编译 class 文件,确认是否新代码未打包到生产环境;可以实时加载类;可以看到 jvm 的参数信息以及单独拎出了 gc 日志与自动 dump 相关参数的配置值;查看指定方法的调用栈;开放http 端口;支持表达式;可以很方便地集成到 SpringBoot 项目中;等。

  • 把 jmap、jstack、jinfo、jstat 等命令的功能进行了整合,线上命令行界面用它排查问题,非常方便。

  • 我比较好奇内存计算那块它是如何实现的,不仅把堆各代的内存展示出来了,还显示了非堆和直接内存等信息,有空需要拜读下源码。

 

有兴趣按照官方文档实操一把就知道了。

 

ConstXiong 备案号:苏ICP备16009629号-3