arthas
arthas是Alibaba开源的Java诊断工具。采用命令行交互模式,可以帮助开发人员或者运维人员查找问题,分析性能,bug追踪。
安装:
1.首先确认本机是否安装telnet
2.下载arthas完整安装包,解压后放到相应目录即可。arthas-packaging-3.5.0-bin.zip
联网情况,可下载arthas-boot.jar或安装脚本文件,在进入arthas命令行时
windows会自动下载依赖包到默认目录【C:\Users\{username}\.arthas\lib\3.5.0\arthas】
Linux下通过脚本安装,在进入arthas命令行时,会下载方法一中的压缩包并解压到当前用户的家目录下的.arthas目录下。{username}/.arthas/ib/3.5.0/arthas
启动:
本地:java -jar arthas-boot.jar 或 as.bat PID/as.sh PID
通过arthas-boot.jar启动,需要选择进程号对应序号,才可挂载arthas
通过as.bat+PID,可直接挂载。
远程:java -jar arthas-boot.jar --target-ip 0.0.0.0
远程连接,需要启动的时候指定目标ip,不能使用默认的。否则连接不上。

命令:

athas的各个命令
官网说明:https://arthas.aliyun.com/doc/en/dashboard.html#
sc 和 sm
通过sc可以查看已加载类的相关信息,比如该类是从哪个jar包加载的,被哪个类加载器加载的,以及是否是接口等等。
sm查看已加载类的方法详情
dashboard
进入当前系统的实时数据面板,按 ctrl+c 退出。这个面板会实时刷新,其中包括线程信息、内存信息、gc信息、还有一些运行时的数据。

thread
查看当前jvm进程的线程详情。可以查看线程的cpu使用时间占比。
- thread –b 找出当前阻塞其他线程的线程
- thread –all, 显示所有的线程;
- thread id, 显示指定线程的运行堆栈;
- thread –state:查看指定状态的线程,如:thread –state BLOCKED;
- thread -n 3:展示当前最忙的前N个线程并打印堆栈;
jvm
查看当前JVM信息
sysprop
查看当前JVM的系统属性(System Property)
sysenv
查看当前JVM的环境属性(System Environment Variables)
getstatic
通过getstatic命令可以方便的查看类的静态属性。
例:getstatic class_name field_name
ognl
执行ognl表达式
dump
dump将特定类的字节码转储到指定目录。
heapdump
以hprof二进制格式转储java堆,如jmap
jad
反编译指定已加载类的源码

classloader
查看类加载器的层次结构、URL和类加载信息。
classloader可以从一个特定的classloader中搜索并打印指定资源的url。在分析ResourceNotFoundException时非常方便。
retransform
加载外部*.class文件,然后解析出类名,重新转换JVM中加载的相应类。
redefine
加载外部的.class文件,redefine jvm已加载的类。可进行热替换,替换内存中加载的class。
monitor
对类的方法进行监控。对输入的class-pattern/method-pattern的类、方法的调用进行监控,Ctrl+C退出。

watch
方法执行数据观测,能方便的观察到指定方法的调用情况。
trace
可以跟踪指定的类的方法的调用路径,并计算整个路径上每个方法调用的时间开销。

stack
打印出当前方法的完整调用堆栈。

tt
检查不同时间的方法的参数、返回值和异常。
借助tt(TimeTunnel),可以在执行历史中的不同时间检查方法的上下文。
options
全局开关
异常:
E:\javaTools\arthas>java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.5.0
[INFO] Process 4360 already using port 3658
[INFO] Process 4360 already using port 8563
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 4360 com.xyj.XYJConsumerApplication
[2]: 11568 com.xyj.XYJServerApplication
[3]: 5536
[4]: 7988 com.xyj.EurekaServerApplication
[5]: 3948 com.xyj.GatewayApplication
2
[ERROR] The telnet port 3658 is used by process 4360 instead of target process 11568, you will connect to an unexpected process.
[ERROR] 1. Try to restart arthas-boot, select process 4360, shutdown it first with running the 'stop' command.
[ERROR] 2. Or try to stop the existing arthas instance: java -jar arthas-client.jar 127.0.0.1 3658 -c "stop"
[ERROR] 3. Or try to use different telnet port, for example: java -jar arthas-boot.jar --telnet-port 9998 --http-port -1
下面出现ERROR的原因是因为之前已经进行过了连接,没有正常退出。所以端口被占用,无法用此端口打开新的进程
可以使用quit或shutdown先关闭之前的连接,然后再进行新的连接,或者按照提示重新连接新的端口:
- java -jar arthas-boot.jar --telnet-port xx --http-port xxx
1340

被折叠的 条评论
为什么被折叠?



