ARTHAS-诊断工具的安装与使用
一、安装、启动
安装包下载地址https://github.com/alibaba/arthas/releases/download/arthas-all-3.6.0/arthas-bin.zip
unzip arthas-bin.zip
/**
** 默认telnet 端口 3568 ,http 8563,因端口冲突顾修改 ,target-ip 物理机IP,用于访问。
** 输入进程序列号,启动成功后服务在单独的一个session进程中,在此进程中执行arthas相关命令,
** quit或exit可退出session会话,完全退出执行stop
**/
java -jar arthas-boot.jar --telnet-port 3569 --http-port 8564 --target-ip 192.168.1.170
退出session回话后重新进入session回话
java -jar arthas-client.jar 192.168.1.170 3569
访问地址:http://192.168.1.170:8564/
二、应用
参考地址:https://arthas.gitee.io/commands.html
1、基础命令
help——查看命令帮助信息
cat——打印文件内容,和linux里的cat命令类似
pwd——返回当前的工作目录,和linux命令类似
cls——清空当前屏幕区域
session——查看当前会话的信息
reset——重置增强类,watch/trace 等命令时,实际上是修改了应用的字节码,插入增强的代码。显式执行 reset 命令,可以清除掉这些增强代码
version——输出当前目标 Java 进程所加载的 Arthas 版本号
history——打印命令历史
quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
shutdown——关闭 Arthas 服务端,所有 Arthas 客户端全部退出
keymap——Arthas快捷键列表及自定义快捷键
2、dashboard 控制面板
展示当前进程的详细信息,CTRL+C退出屏幕滚动
[arthas@125550]$ dashboard
3、thread
当前线程总的数量以及各个线程的状态体现,单个线程的名称,分组,优先级,状态,CPU的负载率 以及是否是守护线程。
所有线程的id、名称、状态、占用cpu这些信息
thread
查看线程堆栈信息
thread id
查看 CPU 使用率 top n 的线程的栈
thread -n
5 s 内线程信息
thread -i 5000
5s内最忙的n个线程栈
thread -n 3 -i 5000
是否有阻塞(即WATTING状态)
thread -b
线程状态 WATTING 、 RUNNABLE、TIMED_WAIT
thread --state WATTING
4、jvm
JVM详细信息
jvm
查看jvm内存信息
memory
5、jad
反编译可以拿到当前类在具体系统中的classload信息
反编译类,类路径.类名称
jad java.lang.String
反编译指定方法 jad 类路径.类名称 方法名
jad com.xindun.datasync.service.DevLogAndroidService consumerMessage
6、sysprop
查看进程的环境变量
查看所有应用环境变量
sysprop
修改环境变量 --> sysprop 环境变量名称 环境变量值
sysprop max_idle 201
系统环境变量
sysenv
7、sc
展示JVM已加载的类信息
sc -d 类路径.类名称
sc -d com.xindun.datasync.service.DevLogAndroidService
8、ognl表达式
1、只查看第一个输入参数 "params[0]" ;
2、查看第一个参数的size "params[0].size()";
3、结果按name属性投影 "params[0].{ #this.name }";
4、按条件过滤 "params[0].{? #this.name == null }" ;
5、判断字符串相等'params[0]=="xyz"';
6、判断long型相等 'params[0]==123456789L'
monitor/watch/trace/stack/tt 类路径.类名 方法名 表达式
查看登录接口参数,用户为xindun账号的登录入参和响应参数
watch com.xindun.auth.controller.LoginController login "{params,returnObj}" -x 2 'params[2]=="xindun"'
9、monitor
对匹配的类或者方法调用进行监控,监控维度包含 调用总次数,成功次数,失败次数,平均 RT,失败率
monitor -c 周期(单位秒) 类路径.类名 方法名
monitor -c 5 com.xindun.mq.redis.RedisServiceUtil rpop
10、watch
方法执行数据观测,可查看出、入参数。
AtEnter、AtExit、AtExceptionExit 对应函数入口、函数正常return、函数抛出异常。
监控接口执行过程
watch 类路径.类名 方法名(可*匹配) -x 2
/**
- -x [n] n表示参数展示的深度
- -n [m] m表示次数
- '{params,returnObj,throwExp}' 打印输入、输出、异常信息,不输入该选项展示全部信息
- -b、-e、-s、-f 观察点,分别是方法调用前、方法异常后、方法返回后、方法结束后(调用方法前不可使用-s、-f)
- '#cost > 2000' 表示耗时超过2秒条件
- -v 打印Condition express的具体值和执行结果,方便确认
**/
watch com.xindun.auth.controller.LoginController * -x 2
只捕获异常的请求
watch 类路径.类名 方法名(可*匹配) -e
watch com.xindun.auth.controller.LoginController * -e
11、trace
方法内部调用路径,并输出方法路径上的每个节点上耗时
trace 类路径.类名 方法名(可*匹配)
/**
- -x [n] n表示参数展示的深度
- -n [m] m表示次数
- '#cost > 2000' 表示耗时超过2秒条件
- 打印内容中的 “#数字” 代表代码所在行数
**/
trace com.xindun.auth.controller.LoginController *
12、stack
输出当前方法被调用的调用路径
类路径.类名 方法名(可*匹配)
/**
- 默认一直监控,可添加执行次数 -n 5(监控5次)
- 方法后可增加过滤条件,如耗时>2秒 '#cost > 2000'
**/
stack com.xindun.auth.service.ManagerService getManagerByUsername
13、tt
记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
tt -t 类路径.类名 方法名(可*匹配)
/**
- 默认一直监控,可添加执行次数 -n 5(监控5次)
- 方法后可增加过滤条件,如耗时>2秒 '#cost > 2000'
**/
tt -t com.xindun.auth.controller.LoginController login
打印出了index这次执行入参和相应结果信息
tt -i
target 目标对象、params 入参、returnObj 出参、throwExp 异常
打印出了index这次执行的目标对象(target)的getLogo的结果
tt -i
INDEX时间片段记录编号,每一个编号代表着一次调用,后续tt还有很多命令都是基于此编号指定记录操作,非常重要。
TIMESTAMP方法执行的本机时间,记录了这个时间片段所发生的本机时间
COST(ms)方法执行的耗时
IS-RET方法是否以正常返回的形式结束
IS-EXP方法是否以抛异常的形式结束
OBJECT执行对象的hashCode()
CLASS执行的类名
METHOD执行的方法名
14、profiler 火焰图
启动火焰图
profiler start
状态
profiler status
停止并输出html文件
profiler stop --format html
点开性能损耗严重的地方可以看放大的详情图
15、heapdump
dump 到指定文件
heapdump /home/xindun/arthas/dump.hprof
只包含活跃对象
heapdump --live /home/xindun/arthas/dump.hprof
16、logger
获取hash classloader值
logger --name com.xindun.auth.controller.LoginController
修改指定类的日志级别
logger --name 类路径.类名 --level 日志级别(trace > debug > info > warn> error) -c 类hash值
logger --name com.xindun.auth.controller.LoginController --level info -c 731e0988
三、IDEA集成ARTHAS
1、安装插件
File->setting->plugins, 搜索 “arthas”,安装重启。
安装好插件后,在方法上右击,会出现如下弹窗,点击右边的watch,trace等会提示命令已经复制到粘贴板
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通