- 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占用情况,内存使用情况,环境参数等,并且仪表盘还会定时自动刷新;
- 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,连接上后与在本机操作一样,直接命令操作;
- 启动时的命令:
java -jar arthas-boot.jar --target-ip 192.168.50.129
java -jar arthas-boot.jar --http-port 8563
注意:本文归作者所有,未经作者允许,不得转载