Java诊断工具arthas操作使用

128 阅读2分钟

一、安装

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方法占用时间较长。进而可以针对该方法进行性能调优。