常见系统Arthas实战秘籍

官方介绍

org

系统

  • 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

浏览器

打开网页后,笔记本风扇狂转,声音好大~~

使用

选择应用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文件

点我-->alpine镜像实时生效应用内部类(实战)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wu858773457

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值