Arthas(阿尔萨斯)是Alibaba开源的Java诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
Arthas支持JDK 6+,支持Linux/Mac/Winodws,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
## 下载
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
## 启动
java -jar arthas-boot.jar
启动过程中需要手动选择一个jvm进程
使用 as.sh
curl -L https://alibaba.github.io/arthas/install.sh | sh
下载后直接./as.sh启动
当前系统的实时数据面板
$ dashboard
ID NAME GROUP PRIORITY STATE %CPU TIME INTERRUPTED DAEMON
889 RMI TCP Connection(15)-30.10.166. RMI Runtime 9 RUNNABLE 48 0:5 false true
1077 Timer-for-arthas-dashboard-0 system 9 RUNNABLE 24 0:0 false true
1074 as-selector-daemon system 9 RUNNABLE 12 0:0 false true
284 JMX server connection timeout 284 RMI Runtime 9 TIMED_WAITI 8 0:3 false true
16 Timer-1 main 5 TIMED_WAITI 5 0:9 false true
47 Pandora pandora-qos-reporter Pool main 5 TIMED_WAITI 0 0:0 false true
数据说明:
查看当前 JVM 的线程堆栈信息
1) thread -b
找出当前阻塞其他线程的线程
2)thread -n 3
找出当前最忙的前3个线程并打印堆栈
3)thread -n 3 -i 1000
指定采样时间间隔1秒
4)thread id
显示指定线程的运行堆栈
查看当前JVM信息
方法执行数据观测
让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。
特别说明:
观察方法参数和返回值:
$ watch demo.MathGame primeFactors "{params,returnObj}" -x 2
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 44 ms.
ts=2018-12-03 19:16:51; [cost=1.280502ms] result=@ArrayList[
@Object[][
@Integer[535629513],
],
@ArrayList[
@Integer[3],
@Integer[19],
@Integer[191],
@Integer[49199],
],
]
watch命令参数比较多,详细参考官网
1)方式一:
默认情况下,日志是不存储的,可以通过以下指令开启
options save-result true
结果会异步保存在:{user.home}/logs/arthas-cache/result.log,请定期进行清理,以免占据磁盘空间
2)方式二:
使用异步后台任务将结果存日志文件(在执行命令后面增加>> &)
$ thread -n 3 >> &
job id : 6
cache location : /root/logs/arthas-cache/8688/6
此时命令会在后台异步执行,并将结果异步保存在文件(~/logs/arthas-cache/ P I D / {PID}/ PID/{JobId})中;
https://alibaba.github.io/arthas/