学会使用ARTHAS(一)
前言
现在有很多文章都在写ARTHAS
,其实笔者也看着文章各种学习。本篇文章,大家可以认为是笔者的“自私贴”,为了逼自己学会ARTHAS
,强行进行了博客搬运。
ARTHAS简介
- 照例,官方释义:
Arthas is a Java Diagnostic tool open sourced by Alibaba. Arthas是一个支持JDK6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的
Tab
自动补全功能的强大的开源Java诊断工具,现在被业界广泛使用。
ARTHAS解决的痛点
- 线上方法耗时突然增加,不知道哪一步骤导致
- 全局查看系统运行情况
- 全局查看JVM运行状态
- 反编译代码,查看我的代码是否提交
ARTHAS使用(下文的{packageName}是全路径!!!)
- 下载安装
这里就不再赘述了,大家可以参照https://alibaba.github.io/arthas/。
-
启动
-
官方给出了两种启动方式,官方更推荐
arthas-boot.jar
包启动,看文档多了个-h
选项。
# jar包(官方更推荐这个)
java -jar arthas-boot.jar
# 打印help信息
java -jar arthas-boot.jar -h
# shell脚本
./as.sh
- attach到相应进程
# 启动
$ java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.1.0
[INFO] Found existing java process, please choose one and hit RETURN.
# 选择进程
* [1]: 417 com.test.zacpark.hello.Test
1
[INFO] arthas home: /opt/soft/arthas
[INFO] Try to attach process 417
[INFO] Attach process 417 success.
[INFO] arthas-client connect 127.0.0.1 3658
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
| .-. || '--'.' | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-' |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
wiki: https://alibaba.github.io/arthas
version: 3.1.0
pid: 417
time: 2019-08-09 10:06:15
- 看板,可以看到线程、内存、GC、运行环境、Tomcat信息等等。
$ dashboard

- 线程栈
$ thread {pid}
- 反编译查看
.class
文件,可以知道.class
文件的ClassLoader
信息和jar
包信息,以及代码(可以看自己提交的代码生效与否)。
$ jad {packageName}.{className}
ClassLoader:
+-sun.misc.Launcher$AppClassLoader@b2929b2
+-sun.misc.Launcher$ExtClassLoader@3b706ad7
Location:
/opt/service/hello/test-1.0.0.jar
/*
* Decompiled with CFR 0_132.
*/
package com.test.zacpark.hello.test;
public class Test {
public static void main(String[] args) {
...
}
}
- 查看函数返回值,会打出函数消耗时间,不用远程调试了
$ watch {packageName}.{className} {methodName} returnObj
ts=2019-08-09 12:21:10; [cost=7.078086ms] result=@Boolean[false]
ts=2019-08-09 12:21:11; [cost=6.550872ms] result=@Boolean[false]
总结
本文对 Arthas
的基础使用,进行了梳理,其实是笔者的“自私学习笔记贴”。
参考文献
转载自:https://juejin.cn/post/6844903909337595912