常用命令
help 查看帮助 help COMMAND 查看指定命令的详细帮助 COMMAND -h 查看指定命令的详细帮助 double tab 查看支持的所有命令 thread 查看所有线程 thread 51 查看指定线程堆栈 thread -n 5 查看前5个线程堆栈 thread -n -1 查看所有线程堆栈 thread -b 查看阻塞线程 thread -i 2000 在计算CPU使用率时指定采样间隔(2秒后输出结果) jad javax.servlet.Servlet 对jvm已加载的类进行反编译
(java -jar cfr-0.148.jar /tmp/TestClass.class 可以反编译class文件,org.benf:cfr0.148)
mc /tmp/Test.java 编译java文件 sc javax.servlet.Servlet 查找jvm已加载的类 sc -d javax.servlet.Servlet 查找jvm已加载的类,打印详细 stack com.TestClass testMethod 查看方法的调用堆栈,重新触发后打印 trace com.TestClass testMethod 查看方法的子调用方法的耗时 watch com.TestClass testMethod {params[0], throwExp} -e 方法抛出异常时查看方法的传入参数,仅当方法抛出异常时才打印(未测试) monitor -c 3 com.TestClass testMethod 监控方法的调用次数,成功率等信息,每隔3秒输出一次。 classloader 查看类加载器数量,以及每个加载器加载的类数量 【redefine + sc + jad】 实现不重启加载class redefine 加载外部的.class文件,redefine jvm已加载的类 redefine -c ClassLoaderHash /tmp/TestClass.class 将修改后编译出来的class文件放到指定目录,并redefine 其中ClassLoaderHash为该类的类加载器HashCode,可通过"sc com.TestClass -d"查询 必须指定ClassLoaderHash,否则修改不生效 注意:原本以为redefine后通过"jad com.TestClass"反编译看一下是否修改,然而反编译一下立刻还原修改了,需要再次redefine(这就是还原的办法了) 【tt】 tt 记录方法调用的时间片信息 tt -t com.TestClass testMethod 开始记录 (https://alibaba.github.io/arthas/tt #方法重载问题-解决方法重载) tt -l 查看历史记录 tt -i ID 查看某个时间片信息(含参数值) tt -i ID -w params[0] 查看时间片方法的第一个参数的值 tt -i ID -w params[0].length() 查看时间片方法的第一个参数的值,支持对象访问 tt -i ID -w {params[0],param[1]} 查看时间片方法的多个参数的值 (-w 观察表达式,https://alibaba.github.io/arthas/advice-class.html)
使用/安装指南
【下载工具】 https://alibaba.github.io/arthas/arthas-boot.jar 或 https://alibaba.github.io/arthas/install.sh(sh install.sh下载启动脚本as.sh) 【使用条件】 环境需要安装java 依赖jdk/lib/tools.jar 如果只有jre,可拷贝jdk的tools.jar到jre/lib/下 as.sh需要telnet命令,若无telnet可使用arthas-boot.jar方式 【启动工具】 java -jar arthas-boot.jar 或 sh as.sh 第一次启动会下载arthas-3.1.4-bin.zip到/root/.arthas/lib/3.1.4/arthas下并解压。 每次启动会检测是否有java进程,然后输入数字选择需要诊断的进程。(PS:工具检测进程的原理$JAVA_HOME/bin/jps -l -v) sh as.sh --repo-mirror aliyun //如果下载速度比较慢,可以使用aliyun的镜像 sh as.sh --target-ip 192.168.1.9 //指定telnet监听IP sh as.sh -h //查看更多启动配置 sh as.sh PID //指定进程诊断 linux-8ku8:/opt/arthas # sh as.sh Arthas script version: 3.1.4 [INFO] JAVA_HOME: /opt/jdk1.8.0_74 [INFO] Process 10528 already using port 3658 [INFO] Process 10528 already using port 8563 Found existing java process, please choose one and hit RETURN. * [1]: 10528 org.apache.catalina.startup.Bootstrap 【默认自动下载目录】 linux-8ku8:~/.arthas/lib/3.1.4/arthas # ls -lh total 22M -rw-r--r-- 1 root root 11M Jun 22 16:13 arthas-3.1.4-bin.zip -rw-r--r-- 1 root root 8.2K Sep 25 2019 arthas-agent.jar -rw-r--r-- 1 root root 109K Sep 25 2019 arthas-boot.jar -rw-r--r-- 1 root root 394K Sep 25 2019 arthas-client.jar -rw-r--r-- 1 root root 11M Sep 25 2019 arthas-core.jar -rw-r--r-- 1 root root 3.7K Sep 25 2019 arthas-demo.jar -rw-r--r-- 1 root root 2.9K Sep 25 2019 arthas-spy.jar -rwxr-xr-x 1 root root 7.6K Sep 25 2019 as-service.bat -rwxr-xr-x 1 root root 3.1K Sep 25 2019 as.bat -rwxr-xr-x 1 root root 28K Sep 25 2019 as.sh -rwxr-xr-x 1 root root 635 Sep 25 2019 install-local.sh 【启动成功】 linux-8ku8:/opt/arthas # sh as.sh ........ ,---. ,------. ,--------.,--. ,--. ,---. ,---. / O \ | .--. ‘‘--. .--‘| ‘--‘ | / O \ ‘ .-‘ | .-. || ‘--‘.‘ | | | .--. || .-. |`. `-. | | | || |\ \ | | | | | || | | |.-‘ | `--‘ `--‘`--‘ ‘--‘ `--‘ `--‘ `--‘`--‘ `--‘`-----‘ ........ [arthas@10528]$ help //查看帮助;double tab查看支持的所有命令;help COMMAND查看指定命令的详细帮助 [arthas@10528]$ exit //断开连接,工具还在运行。重新执行as.sh可再次进入,或者telnet 127.0.0.1 3658也可再次重连(后者连接速度超快) [arthas@10528]$ shutdown 或 stop //关闭工具 【离线安装】 将arthas-3.1.4-bin.zip解压到/root/.arthas/lib/3.1.4/arthas/目录下 非root用户解压到/home/$USER/.arthas/lib/3.1.4/arthas/目录下,注意修改文件的用户属组 然后启动即可,不同用户下执行as.sh,会调用各自用户家目录下的arthas 【Arthas用户文档】 https://github.com/alibaba/arthas/edit/master/README_CN.md https://alibaba.github.io/arthas/dashboard
原文:https://www.cnblogs.com/zhangzongjian/p/11790074.html