阿里人都在使用的在线诊断工具—Arthas
导读:虽然已经有很多分析工具 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定位和排查问题!
扩展:java Instrumentation指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序。这种监测和协助包括但不限于获取JVM运行时状态,替换和修改类定义等。Arthas 的整体逻辑也是在 Java 的Instrumentation基础上来实现。
Arthas的操作流程(简易)
官方提供了两种使用方式 下载arthas-boot.jar 或者直接安装使用 as. sh。这里说明前一种。
一、下载arthas-boot.jar
注明:个人环境是Mac环境,其他环境可借鉴参考
会将目标文件下载到当前目录中。
二、运行arthas-boot.jar
可以看到执行 java -jar arthas-boot.jar之后,它罗列了当前的java进程供你选择,选择之后,就可以对该进程进行监控了。(也可以直接增加pid监控,如:java -jar arthas-boot.jar pid)。在选择好pid之后,它首先会将 arthas所需要的jar相关文件进行下载,然后做一些初始化的工作。
注:最后一行‘[arthas@1640]$’ ,说明打开进入了监控客户端,在这里就可以执行相关命令进行查看了。可以使用quit(退出当前客户端)、stop\shutdown(关闭arthas服务端,并退出所有客户端)。除了在命令行查看外,还可以通过浏览器访问http://127.0.0.1:8563/查看。如下图:
当我们在shell端执行quit,并重新java -jar arthas-boot.jar 1640当前进程后。会有这样一个提示(表示目标进程已被监听,跳过attach)本篇暂时不讲attach机制相关内容,感兴趣的朋友可自行先查阅资料,后续篇章会慢慢讲解。
这里是下载好之后的文件列表,也就是直接执行第二种安装方式‘curl -L https://alibaba.github.io/arthas/install.sh | sh’安装的文件。
三、简单操作arthas
通过输入help可以看到,提供了很多的功能,tab可自动补全功能,
以下列表中标有注1的需要知道,这些命令通过asm字节码增强技术来实现,会在指定的方法中插入一些切面来实现数据统计及观测功能。因此在线上、预发环境使用时,要明确需要观测的类、方法及条件。诊断结束后要shutdown或者执行reset命令。
这里就挑几个常用的命令进行展示:
- dashboard:查看jvm\线程\env基本信息(上面浏览器查看效果)
- thread:查看线程的运行状态
- jad:反编译class文件[通过自动补全,查找上线代码是否包含自己新增的功能,很方便]
【以下的这几个通过简单测试代码进行试用】
– sc:查看jvm中已经加载的类信息
– stack:调用栈信息
– Track:观察方法执行的时候哪个子调用比较慢:
– watch:观察方法的执行入参
3.1 dashboard
主要展示了三部分内容,线程,jvm,java-env。每过几秒会自动刷新
3.2 Thread
可以用来显示线程的一些基本信息,使用语法如下
例如使用 -n ,显示几条线程信息,根据cpu使用率排序
3.3 jad
可以用来检查线上的发布代码是否是最新的。可以定位到具体类,或者具体方法。很方便.
3.4 mc redefine
编译类,并外部加载。
可以查看
3.5 sc
查看jvm中加载的类的信息
例如查看java.util.Stack类信息
对于Arthas的使用我最近会出一个整套系列文章,来讲述我们日常是怎么用Arthas定位和排查问题!正在写案例中...敬请期待!
作者 | 智哥
本文为码农架构原创内容,未经允许不得转载。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
小白必看!JS中循环语句大集合
摘要:JavaScript中,一共给开发者提供了一下几种循环语句,分别是while循环,do…while循环,for循环,for Each,for…in循环和for…of循环。 本文分享自华为云社区《JS中循环语句大集合丨【WEB前端大作战】》,原文作者:hwJw19 。 JavaScript中,一共给开发者提供了一下几种循环语句,分别是while循环,do…while循环,for循环,for Each,for…in循环和for…of循环。 下面我们就通过本文来仔细分辨一下,各个循环的使用差异。 while循环 语法: while (expr){ statement } expr为条件表达式,当expr为真时,执行statement语句,执行结束后,再次进入下一轮循环,直到条件表达式为假时,跳出循环。 代码示例: var n = 1; //声明并初始化循环变量 while(n <= 100){ //循环条件 n++; //递增循环变量 if (n % 2 == 0) document.write(n + ""); //执行循环操作 } d...
- 下一篇
两年工作经验,离职了...
Hi,大家好,我是3y 啊,好久没在oschina更新了… 当大家看到这篇文章的时候,我已经办完离职手续离开了蘑菇街。从19年初到蘑菇街实习,到现在不知不觉已经两年多了。两年时间说短不短,说长也不长。 之前在蘑菇街就已经送别了不少好友,但当主角是自己时,心里的感受却无以表达。 离开广州 当我还在大三读书时,某一天晚饭我曾对我爸妈说:“有可能,我毕业以后会去其他城市工作,这些城市不限于北京、上海、深圳或杭州” 我爸听了之后:“嗯?你毕业了在广州找不到工作吗?为什么要跑到其他的城市?” 我:“我感觉广州互联网机会可能相对没那么多” 我补充道:“也不是一定会跑到其他城市,只是提前跟你们说下。就是将来有可能会去这些城市,也有可能留在广州。到时候面试完看下机会吧,等我决定好了就会跟你们讲的。” 我妈:“嗯,到时候看看吧。如果你是真的去其他城市,我们都会支持你的,主要看你自己的想法吧” 结果在秋招期间,也就真的拿了各个城市的offer… 当我决定离开广州的时候也考虑过很多:周围身边朋友,家里人和女朋友都在广州,离开了广州意味这我得去一个陌生的城市一个人工作至少2年的时间。但可预见的即是,我会有更多...
相关文章
文章评论
共有0条评论来说两句吧...