Arthas-你值得拥有的线上监控诊断助手


前言

有企业级项目经验的人都应该了解,生产环境是不能在本地进行调试的,本地也无法启动生产环境。开发人员可以尝试在测试环境复现生产环境中的问题,但是,某些问题无法在不同的环境中轻松复现,甚至在重新启动后就消失了。本篇文章将要介绍Arthas这个线上诊断工具,可以帮助开发人员排查线上问题,提升排查效率。


一、什么是Arthas

Arthas 是 Alibaba 开源的 Java 诊断工具,通过全局视角实时查看应用 load、内存、gc、线程、方法的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断。
在这里插入图片描述

Arthas(阿尔萨斯)能为我们这些开发人员做什么?当我们遇到以下问题且束手无策时,Arthas 可以帮助我们解决

  1. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  2. 是否有一个全局视角来查看系统的运行状况?
  3. 有什么办法可以监控到 JVM 的实时运行状态?
  4. 怎么在线上查看一个方法的运行情况?

二、Arthas安装

Arthas这个工具的安装非常简单,只要把压缩包上传至服务器,然后解压即可使用,最新版可以在Arthas官网或者从 Maven 仓库下载。
下载完成,上传至服务器,解压后,在文件夹里有arthas-boot.jar,直接用java -jar的方式启动,arthas本身也是个Java程序。

java -jar arthas-boot.jar

三、Arthas排查线上问题示例

接下来作者演示一下如何用Arthas诊断和排查线上bug

问题出现:线上出现了个定时任务同步异常,排查相关日志后发现有空指针报错,但是具体的堆栈信息没有打印出来,导致定位不到是哪一行报的空指针异常,因为同步业务较复杂且业务数据量较多,要是一行一行去分析代码中可能报空指针的地方非常耗时,于是就用Arthas进行定位
在这里插入图片描述
①通过命令启动arthas

②列出了所有正在运行的java程序

③输入需要,敲回车,监控指定的java程序(也就是生产环境你需要监控的具体项目的Java程序)

④监控该java程序的arthas 监听端口号,因为启动时没有指定端口号,所以默认是3658

⑤arthas版本号

⑥监控的java程序pid

⑦进入arthas 命令行控制台

进入arthas 命令行控制台后输入以下命令(这条命令的含义是监测这个方法的运行情况,后面的参数是方法所在的包以及方法名)

trace com.jinzihao.common.util.SyncUtil syncUsers -n 5 --skipJDKMethod false

输入完毕后,我们需要复现问题,重新执行一次定时任务

+---[min=9.91E-4ms,max=58.495127ms,total=37327.082647ms,count=32401] java.util.List:contains() #855
+---[min=0.001105ms,max=0.014592ms,total=1.076124ms,count=473] com.jinzihao.common.entity.User:getIsValid() #855
+---[min=9.64E-4ms,max=0.122318ms,total=1.001302ms,count=473] java.lang.String:equals() #855 [throws Exception]
---throw:java.lang.NullPointerException #855 [null]

过了不久我们可以看到是方法的855行出现了空指针异常,成功定位到了问题。

使用完毕后我们不要忘记退出程序,以免占用内存资源,如果只是退出当前的连接,可以用quit或者exit命令,Attach 到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。如果想完全退出 arthas,可以执行stop命令。


总结

本篇文章主要介绍了什么是Arthas以及演示了如何用Arthas排查生产环境的实际问题,Arthas还有很多命令用来排查线上问题,大家可以在Arthas官网的命令列表中自行浏览和学习。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JinziH Never Give Up

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

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

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

打赏作者

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

抵扣说明:

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

余额充值