官方介绍
系统
- Centos
curl -L https://alibaba.github.io/arthas/install.sh | sh
./as.sh
- Debian
curl -L -k https://alibaba.github.io/arthas/install.sh | sh
./as.sh
- windows
#不能是powershell要在cmd下
cd /d D:\tmp\soft\shutcut\arthus
curl -O https://arthas.gitee.io/arthas-boot.jar
#windows如果存在uac,管理员cmd里启动可解决
java -jar arthas-boot.jar
浏览器
-
本地选择完pid
-
浏览器打开 http://localhost:3658/
打开网页后,笔记本风扇狂转,声音好大~~
使用
选择应用id
注意:需要在启动java应用的用户下执行
大盘
-
执行
dashboard
-
执行2次
dashboard -n 2
执行耗时
-
类方法耗时
trace cn.iocoder.xxx.module.system.service.sso.SsoUserServiceImpl ssoGetToken
-
运行一次
trace com.xxx.adminweb.controller.PositionController initTree run -n 1
-
跟踪jdk里的函数
trace --skipJDKMethod false com.xxx.adminweb.controller.PositionController initTree run -n 1
-
查看多级方法调用
-
方法一:
trace com.xxx.insulation.service.impl.MaterialWapServiceImpl pageList --skipJDKMethod false #查看返回的listenerId 如:9 #新开终端 telnet localhost 3658 指定listenerId trace com.xxx.insulation.service.impl.MaterialWapServiceImpl setMaterialInfo --skipJDKMethod false --listenerId 9
-
方法二:
trace -E com.xxx.insulation.controller.MaterialWapController|com.xxx.insulation.service.impl.MaterialWapServiceImpl page|pageList
-
打印方法参数
-
深度3
watch cn.iocoder.xxx.module.system.service.sso.SsoUserServiceImpl ssoGetToken '{params,returnObj}' -x 3
-
查看类对象的属性
watch cn.iocoder.xxx.module.system.service.sso.SsoUserServiceImpl ssoGetToken 'target' -x 2
-
其他用法
help watch
修改日志级别
-
改成debug
logger logger --name ROOT --level debug
-
改成info
logger --name ROOT --level info
-
改指定classloader的logger信息
sc -d org.springframework.mail.javamail.JavaMailSenderImpl | grep classLoaderHash #随后可以通过classLoader找到其对应的logger: logger -c 5d05ef57 #然后就可以调整对应的logger日志级别: logger -c 5d05ef57 --name ROOT --level debug logger -c 5a9800f8 --name ROOT --level info logger -c 73ff4fae --name ROOT --level error
动态改class文件
含内部类
反编译+改代码
-
在线处理
-
反编译
#--source-only 的含义为,只输出源码部分,如果不加这个参数,在反编译出的内容头部会携带类加载器的信息 jad --source-only cn.iocoder.xxx.module.system.service.permission.PermissionServiceImpl > /tmp/PermissionServiceImpl.java
-
vi 等编辑器对源码进行编辑
-
查找类加载器
sc -d cn.iocoder.xxx.module.system.service.permission.PermissionServiceImpl
-
内存编译
使用
-c
指定类加载器的 hash 值。编译完成后,/tmp 目录下会生成对应的 class 字节码文件
mc -c 728938a9 /tmp/PermissionServiceImpl.java -d /tmp
-
-
本地intellij处理 修改java文件 ctrl+shift+f9 编译生成class文件