6

阿里人都在使用的在线诊断工具—Arthas

 2 years ago
source link: https://my.oschina.net/lishangzhi/blog/5073887
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

阿里人都在使用的在线诊断工具—Arthas - 公众号:码农架构 - OSCHINA - 中文开源技术交流社区

导读:虽然已经有很多分析工具 jvisualvm,jstat,jmap,jstack,Memory Analyzer等。但可能不是大杂烩,或者线上无法分析等。所以看看arthas的功能,好用就用它了

Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

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

Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

Arthas 的命令、功能在其官方文档有详细介绍,对于Arthas的使用我最近会出一个整套系列文章,来讲述我们日常是怎么用Arthas定位和排查问题!

v2-3deba41ea941a62337da6317731c5cad_1440w.jpg

扩展:java Instrumentation指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序。这种监测和协助包括但不限于获取JVM运行时状态,替换和修改类定义等。Arthas 的整体逻辑也是在 Java 的Instrumentation基础上来实现。

Arthas的操作流程(简易)

官方提供了两种使用方式 下载arthas-boot.jar 或者直接安装使用 as. sh。这里说明前一种。

一、下载arthas-boot.jar

注明:个人环境是Mac环境,其他环境可借鉴参考

v2-f2f45e0bf3a6089e30d5e5c5c76d547f_1440w.jpg

会将目标文件下载到当前目录中。

二、运行arthas-boot.jar

可以看到执行 java -jar arthas-boot.jar之后,它罗列了当前的java进程供你选择,选择之后,就可以对该进程进行监控了。(也可以直接增加pid监控,如:java -jar arthas-boot.jar pid)。在选择好pid之后,它首先会将 arthas所需要的jar相关文件进行下载,然后做一些初始化的工作。

v2-c3a5f88fb5d3cd963f23ab84ef7648d2_1440w.jpg

注:最后一行‘[arthas@1640]$’ ,说明打开进入了监控客户端,在这里就可以执行相关命令进行查看了。可以使用quit(退出当前客户端)、stop\shutdown(关闭arthas服务端,并退出所有客户端)。除了在命令行查看外,还可以通过浏览器访问http://127.0.0.1:8563/查看。如下图:

v2-6fbe41b4ce795615bb96f1635b7f45df_1440w.jpg

当我们在shell端执行quit,并重新java -jar arthas-boot.jar 1640当前进程后。会有这样一个提示(表示目标进程已被监听,跳过attach)本篇暂时不讲attach机制相关内容,感兴趣的朋友可自行先查阅资料,后续篇章会慢慢讲解。

这里是下载好之后的文件列表,也就是直接执行第二种安装方式‘curl -L https://alibaba.github.io/arthas/install.sh | sh’安装的文件。

v2-3cbd0d926b2bef2ac5e764d896719410_1440w.jpg

三、简单操作arthas

通过输入help可以看到,提供了很多的功能,tab可自动补全功能,

以下列表中标有注1的需要知道,这些命令通过asm字节码增强技术来实现,会在指定的方法中插入一些切面来实现数据统计及观测功能。因此在线上、预发环境使用时,要明确需要观测的类、方法及条件。诊断结束后要shutdown或者执行reset命令。

v2-9c2ce253b5f7b4e777d925e421e5a64e_1440w.jpg

这里就挑几个常用的命令进行展示:

  • dashboard:查看jvm\线程\env基本信息(上面浏览器查看效果)
  • thread:查看线程的运行状态
  • jad:反编译class文件[通过自动补全,查找上线代码是否包含自己新增的功能,很方便]

【以下的这几个通过简单测试代码进行试用】
– sc:查看jvm中已经加载的类信息
– stack:调用栈信息
– Track:观察方法执行的时候哪个子调用比较慢:
– watch:观察方法的执行入参

3.1 dashboard

主要展示了三部分内容,线程,jvm,java-env。每过几秒会自动刷新

v2-c00db3897aebcacd9654aa44f8a7b8ea_1440w.jpg

3.2 Thread

可以用来显示线程的一些基本信息,使用语法如下

v2-1c078308e1719d933e5273d2457d6914_1440w.jpg

例如使用 -n ,显示几条线程信息,根据cpu使用率排序

v2-3c082b8c718c68ddd3f75c58412181f0_1440w.jpg

3.3 jad

可以用来检查线上的发布代码是否是最新的。可以定位到具体类,或者具体方法。很方便.

v2-f56816d7c3b0403e3893b4501aad02e7_1440w.jpg

3.4 mc redefine

编译类,并外部加载。

3.5 sc

查看jvm中加载的类的信息

v2-fdc99a39b392f8b2e3cc460b020f0663_1440w.jpg

例如查看java.util.Stack类信息

对于Arthas的使用我最近会出一个整套系列文章,来讲述我们日常是怎么用Arthas定位和排查问题!正在写案例中...敬请期待!

作者 | 智哥

原文链接

本文为码农架构原创内容,未经允许不得转载。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK