赞
踩
Arthas 是 Alibaba
在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+
, 采用命令行交互模式,提供 Tab
自动补全,可以方便的定位和诊断线上程序运行问题。
开源地址:https://github.com/alibaba/arthas
官方文档:https://arthas.aliyun.com/doc/
安装分为全量安装和非全量安装,非全量安装会在第一次使用时自动下载依赖。
首先介绍全量安装方式:
安装zip和unzip
[root@localhost ~]# yum install -y zip unzip
下载全量安装包
[root@localhost ~]# wget https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/3.3.6/arthas-packaging-3.3.6-bin.zip
解压安装包
[root@localhost ~]# unzip arthas-packaging-3.3.6-bin.zip -d /usr/local/arthas
启动
[root@localhost ~]# cd /usr/local/arthas/ [root@localhost arthas]# java -jar arthas-boot.jar [INFO] arthas-boot version: 3.3.6 [INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER. * [1]: 42405 qixi-emp-1.0-SNAPSHOT.jar 1 [INFO] arthas home: /usr/local/arthas [INFO] Try to attach process 42405 [INFO] Attach process 42405 success. [INFO] arthas-client connect 127.0.0.1 3658 ,---. ,------. ,--------.,--. ,--. ,---. ,---. / O \ | .--. ''--. .--'| '--' | / O \ ' .-' | .-. || '--'.' | | | .--. || .-. |`. `-. | | | || |\ \ | | | | | || | | |.-' | `--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' wiki https://alibaba.github.io/arthas tutorials https://alibaba.github.io/arthas/arthas-tutorials version 3.3.6 pid 42405 time 2020-07-15 13:26:58 [arthas@42405]$
dashboard: 概览程序的 线程、内存、GC、运行环境信息
thread: 查看所有线程信息
thread 12: 查看线程id为12的线程信息
thread -b: 查找死锁
sc: 查看已加载的类的信息
# 查看信息
[arthas@17178]$ sc com.qixi.emp.controller.EmpController
# 查看类的详细信息
[arthas@17178]$ sc -d com.qixi.emp.controller.EmpController
# 支持模糊搜索
[arthas@17178]$ sc com.qixi.emp.controller.*
# 查看类的字段信息
[arthas@30154]$ sc -d -f com.qixi.emp.controller.EmpController
jad: 反编译类的信息
[arthas@17178]$ jad com.qixi.emp.controller.EmpController
ognl: 执行ognl表达式
官网说明:https://alibaba.github.io/arthas/ognl.html#ognl
示例:
# 调用静态函数(调用之后输出了方法的返回值)
[arthas@30154]$ ognl '@java.lang.System@out.println("Hello World")'
null
getstatic: 查看类的静态属性的值
[arthas@30154]$ getstatic com.qixi.arthas.service.impl.TestServiceImpl hashSet
heapdump: 把堆导出成一个文件
然后就可以用java的图形化分析工具分析这个文件了
Java提供了jmap命令可到类似效果:
例如:
jmap -histo [pid] | head -20
查看占内存最高的对象类型(列出前20行)慎重使用,会导出堆内存,堆内存大的时候会使生产环境卡顿很久。
jmap -dump:live,format=b,file=pid.hprof [pid]
将java内存堆栈导出为一个文件
redefine: 热替换class
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。