Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 官方文档
查看服务器上是否已有arthas-boot.jar
文件,如果不存在,通过以下命令将文件下载到当前目录
curl -O https://arthas.aliyun.com/arthas-boot.jar
如果应用运行在docker容器内,需要进入到docker中进行操作。
运行docker ps
,查看容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b3a8b5d66d0 nginx:latest "/docker-entrypoint.…" 3 weeks ago Up 17 minutes nginx
0389efb8e1bd java:8 "nohup java -jar jdg…" 3 weeks ago Up 17 minutes jdgk-taizhou
0dd0a4380685 redis "docker-entrypoint.s…" 4 weeks ago Up 4 weeks 0.0.0.0:6379->6379/tcp
运行docker exec -it 容器ID bash
进入docker
运行ls
查看当前目录是否存在arthas-boot.jar
文件,有的话,直接进入以下环节
运行 java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.5.5
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 1 jdgk.jar
选择要诊断的java进行,输入 1
(进程号) 回车,进入成功后如下显示
[INFO] arthas home: /root/.arthas/lib/3.5.6/arthas
[INFO] Try to attach process 1
[INFO] Attach process 1 success.
[INFO] arthas-client connect 127.0.0.1 3658
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
| .-. || '--'.' | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-' |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
wiki https://arthas.aliyun.com/doc
tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html
version 3.5.6
main_class
pid 1
time 2022-03-04 15:35:28
运行相关命令查看进行信息
退出arthas
如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。
如果想完全退出arthas,可以执行stop命令。
火焰图可以用来观察当前项目的应用热点。观察哪些方法耗时过长,便于后期项目优化。
# 开始采集
profiler start
# 结束采集
profiler stop
#火焰图 执行300秒自动结束 -e 参数用于docker容器内部运行
profiler start -d 300 -e itimer
通过浏览器查看arthas-output下面的profiler结果
默认情况下,arthas使用3658端口,则可以打开: http://localhost:3658/arthas-output/ 查看到arthas-output目录下面的profiler结果
docker环境下因为端口没有映射到外部,无法通过浏览器查看,需要通过命令将文件复制到主机,再下载到本地进行查看
docker cp 容器ID:文件路径 主机文件路径
dashboard
查看当前程序的线程和内存占用情况 ID NAME GROUP PRIORI STATE %CPU DELTA_ TIME INTER DAEMON
10 http-nio-8080-exec- main 5 TIMED_ 11.02 0.550 0:13.3 false true
79 http-nio-8080-exec- main 5 TIMED_ 9.73 0.486 0:8.37 false true
80 http-nio-8080-exec- main 5 RUNNAB 8.3 0.414 0:7.19 false true
83 http-nio-8080-exec- main 5 TIMED_ 7.71 0.385 0:6.14 false true
10 http-nio-8080-exec- main 5 RUNNAB 6.34 0.316 0:4.09 false true
79 http-nio-8080-exec- main 5 RUNNAB 3.41 0.170 0:7.93 false true
-1 GC task thread#1 (P - -1 - 1.05 0.052 1:58.8 false true
-1 GC task thread#3 (P - -1 - 1.03 0.051 1:59.4 false true
-1 GC task thread#0 (P - -1 - 1.03 0.051 1:59.2 false true
-1 GC task thread#2 (P - -1 - 1.03 0.051 1:59.0 false true
Memory used total max usage GC
heap 2007M 3778M 984
ps_eden_space 517M 1056M gc.ps_scavenge.time 104570
66M 118M 118M (ms)
ps_old_gen 1424M 2604M gc.ps_marksweep.cou 53
nonheap 325M 349M -1 nt
code_cache 119M 120M 240M gc.ps_marksweep.tim 35355
metaspace 186M 206M -1 e(ms)
Runtime
os.name Linux
os.version 3.10.0-514.26.2.el7.x86_64
java.version 1.8.0_111
thread
查看当前所有线程 Threads Total: 402, NEW: 0, RUNNABLE: 29, BLOCKED: 0, WAITING: 50, TIMED_WAITING
: 313, TERMINATED: 0, Internal threads: 10
ID NAME GROUP PRIORI STATE %CPU DELTA_ TIME INTER DAEMON
22 http-nio-8080-exec- main 5 RUNNAB 13.26 0.026 0:8.87 false true
20 http-nio-8080-exec- main 5 RUNNAB 13.16 0.026 0:6.17 false true
12 http-nio-8080-exec- main 5 RUNNAB 12.55 0.025 0:7.64 false true
83 http-nio-8080-exec- main 5 RUNNAB 12.42 0.025 0:6.32 false true
83 http-nio-8080-exec- main 5 RUNNAB 12.32 0.024 0:5.01 false true
11 http-nio-8080-exec- main 5 RUNNAB 12.12 0.024 0:5.27 false true
11 http-nio-8080-exec- main 5 RUNNAB 12.05 0.024 0:3.32 false true
10 http-nio-8080-exec- main 5 RUNNAB 11.59 0.023 0:6.16 false true
11 arthas-command-exec system 5 RUNNAB 0.99 0.002 0:29.3 false true
-1 VM Thread - -1 - 0.69 0.001 0:20.2 false true
-1 C2 CompilerThread1 - -1 - 0.67 0.001 1:28.9 false true
83 http-nio-8080-exec- main 5 TIMED_ 0.12 0.000 0:3.71 false true
62 lettuce-nioEventLoo main 5 RUNNAB 0.06 0.000 0:2.13 false true
35 lettuce-nioEventLoo main 5 RUNNAB 0.04 0.000 0:14.9 false true
-1 VM Periodic Task Th - -1 - 0.03 0.000 0:0.90 false true
80 http-nio-8080-Clien main 5 RUNNAB 0.01 0.000 0:3.26 false true
37 lettuce-eventExecut main 5 WAITIN 0.01 0.000 0:1.46 false true
18 Druid-ConnectionPoo main 5 WAITIN 0.01 0.000 0:0.97 false true
65 Spring session redi main 5 WAITIN 0.01 0.000 0:0.37 false false
47 org.springframework main 5 TIMED_ 0.01 0.000 0:0.64 false false
42 org.springframework main 5 TIMED_ 0.01 0.000 0:0.64 false false
# 指定类 指定方法
tt -t cn.zjyjx.web.controller.buz.InfoController getRemind
# 模糊类名
tt -t *LoginController newLoginIn
# jad 类名
jad cn.zjyjx.web.controller.buz.InfoController
# jad 类名 方法名
jad cn.zjyjx.web.controller.buz.InfoController getRemind
# watch 类名 方法名
watch demo.MathGame primeFactors -x 2
返回内容
观察表达式,默认值是{params, target, returnObj},对应下发内容 result
method=demo.MathGame.primeFactors location=AtExceptionExit
ts=2021-08-31 15:22:57; [cost=0.220625ms] result=@ArrayList[
@Object[][
@Integer[-179173],
],
@MathGame[
random=@Random[java.util.Random@31cefde0],
illegalArgumentCount=@Integer[44],
],
null,
]