一、安装
github下载
wget alibaba.github.io/arthas/arth…
或者 Gitee 下载
wget arthas.gitee.io/arthas-boot…
打印帮助信息
java -jar arthas-boot.jar -h
二、运行
Arthas 只是一个 java 程序,所以可以直接用 java -jar 运行。运行时或者运行之后要选择要监测的 Java 进程。
运行方式1,先运行,在选择 Java 进程 PID
java -jar arthas-boot.jar
选择进程(输入[]内编号(不是PID)回车)
[INFO] arthas-boot version: 3.1.4
[INFO] Found existing java process, please choose one and hit RETURN.
- [1]: 11616 com.Arthas
[3]: 16200 org.jetbrains.jps.cmdline.Launcher
[4]: 21032 org.jetbrains.idea.maven.server.RemoteMavenServer
运行方式2,运行时选择 Java 进程 PID
java -jar arthas-boot.jar [PID]
查看 PID 的方式可以通过 ps 命令,也可以通过 JDK 提供的 jps命令。
查看运行的 java 进程信息
$ jps -mlvV
筛选 java 进程信息
$ jps -mlvV | grep [xxx]
三、命令
官网参考:arthas.aliyun.com/doc/command…
1、显示控制面板信息
dashboard
使用 dashboard 命令可以概览程序的 线程、内存、GC、运行环境信息
2、线程相关
thread
thread threadId //查看threadId的线程
thread -n 5 //显示cpu使用率topN的线程
thread -b //查看是否有死锁或阻塞
thread |grep pool
3、反编译
jad 包名.类名
反编译只显示源码
jad --source-only com.Arthas
反编译某个类的某个方法
jad --source-only com.Arthas mysql
4、查看类字段信息
sc -d -f com.Arthas
5、查看方法信息
sm com.Arthas
6、查看变量的值
ognl '@com.Arthas@hashSet'
ognl '@com.Arthas@hashSet.size()'
$ ognl '@com.Arthas@hashSet' | grep test
7、trace命令 (排查耗时长)
trace com.UserController getUser
8、统计方法耗时
monitor -c 5 com.UserServiceImpl get
9、watch 查看方法的入参出参
查看入参和出参
$ watch com.Arthas addHashSet '{params[0],returnObj}'
查看入参和出参大小
$ watch com.Arthas addHashSet '{params[0],returnObj.size}'
查看入参和出参中是否包含 'count10'
$ watch com.Arthas addHashSet '{params[0],returnObj.contains("count10")}'
查看入参和出参,出参 toString
$ watch com.Arthas addHashSet '{params[0],returnObj.toString()}'
10、stack 查看方法的调用路径
观察 类com.UserServiceImpl的 mysql 方法调用路径
stack com.UserServiceImpl mysql
11、 方法调用时空隧道
使用 tt 命令记录方法执行的详细情况
tt 命令方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测 。
开始记录方法调用信息:tt -t com.UserServiceImpl check
查看记录的方法调用信息: tt -l
查看调用记录的详细信息(-i 指定 INDEX): tt -i 1001
重新调用:tt -i 1001 -p
四、k8s中使用实例
1、进入k8s对应的容器
k exec -it vetc-web-756f76f57d-66tvv -n vet sh
2、启动arthas
cd tools && sh start-arthas.sh
3、选择要监控的java进程
输入进程号1
4、查看query方法的耗时
trace cn.unipus.vetc.web.service.impl.admin.AdminTeacherService query
5、性能分析
从图中可看到调用链不同方法的时长和占比,loadSchoolTeacher方法占用时间较长。进而可以针对该方法进行性能调优。