【JVM】Alibaba又一强大的开源工具——JVM内存诊断工具Arthas初探

  • Arthas介绍
  • 什么时候可以用Arthas
  • 安装使用
  • 常见命令
  • WebConsole

Arthas介绍

  • Arthas 是Alibaba开源的Java诊断工具,支持JDK 6+,支持Linux/Mac/Winodws,最初是在2018年9月开源的,现在比较火;我们在线上的程序遇到问题,而在线下有很难重现的时候,就会非常麻烦,可能使用jmap,jstat等一系列命令可以定位部分问题,但是效率相比Arthas来说要低很多;我们在线上遇到的常见问题都可以用Arthas来解决,大大提高问题排查的效率;

什么时候可以用Arthas

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

安装使用

  • Arthas是用Java写的,直接启动jar包就可以,非常方便;启动后会自动检测当前机器中的java进程(相当于jps命令),选择一个进程后就可以进入该程序,然后就可以操作了;
  • jar包下载地址(码云):https://arthas.gitee.io/arthas-boot.jar
  • 官方文档地址(码云):https://arthas.gitee.io/

常见命令

  • dashboard:可以轻松常看当前程序的各个线程的CPU占用情况,内存使用情况,环境参数等,并且仪表盘还会定时自动刷新;

2020-07-25_08-35-56.png
  • thread:查看各个线程的优先级,CPU占用情况,线程状态等;也可以使用thread -b检测是否有阻塞线程,使用thread <线程ID>可以打印线程堆栈信息(可以快速定位异常线程代码);
  • watch: 方法执行数据观测,让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,还通过编写 OGNL 表达式进行对应变量的查看;
  • stack:输出当前方法被调用的调用路径,很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从哪里被执行了,此时你需要的是 stack 命令;
  • tt:方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测,watch 虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。这个时候如果能记录下当时方法调用的所有入参和返回值、抛出的异常会对整个问题的思考与判断非常有帮助;
  • jad:反编译指定已加载类的源码;
  • trace:方法内部调用路径,并输出方法路径上的每个节点上耗时;
  • sm:查看已加载类的方法信息(不含父类);
  • profiler:支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图;在Linux下可以支持非常多的Event(统计维度),例如:CPU;
  • classloader:将 JVM 中所有的classloader的信息统计出来,并可以展示继承树,urls等;
  • 其他支持的命令还非常多,可以在官方文档查看详细的使用方式。

WebConsole

  • Arthas也支持远程web连接,在启动的时候需要指定监听的IP,默认端口号是8563,连接上后与在本机操作一样,直接命令操作;

2020-07-25_08-58-19.png
  • 启动时的命令:
java -jar arthas-boot.jar --target-ip 192.168.50.129
java -jar arthas-boot.jar --http-port 8563

注意:本文归作者所有,未经作者允许,不得转载

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Maoway稻草人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值