Arthas-使用
说明
之前一直不想学习Arthas,想着生产不能随便用。用于动态添加调试日志还是很方便的,还有更多更强大功能慢慢研究
官网:https://arthas.gitee.io/index.html
下载并连接
curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar
动态新增调试日志
用于增加业务代码调试日志,或者框架内部调试日志很方便
#将方法区指定类,反编译成java文件 --source-only是不生成classLoader信息 可以看自己代码是否有改到之类的 jad --source-only com.liqiang.demo.controller.HelloWordController > /Users/liqiang/Desktop/logs/HelloWordController.java #修改反编译的java修改后编译成class并输出到指定目录 复杂类可能会失败,可以通过本地编译成class然后替换 mc -d /Users/liqiang/Desktop/logs /Users/liqiang/Desktop/logs/HelloWordController.java #热部署重新加载指定class,可以指定classLoader redefine /Users/liqiang/Desktop/logs/com/liqiang/demo/controller/HelloWordController.class
链路追踪
更多使用方式看文档trace命令,缺点好像是aop切面里面的耗时统计不了,只能定位到aop 然后一次监控aop里面调用的业务代码
trace com.ewei.module.talk.service.impl.ChatCacheServiceImpl updateEngineerQueue --skipJDKMethod true
skipJDKMethod 是否统计jdk代码的堆栈
https://arthas.gitee.io/trace.html
跟业务代码看到for循多次访问了多次redis 可以通过优化为管道
观察函数入参和出参
whatch文档
https://arthas.gitee.io/watch.html
watch com.ewei.helpcenter.logic.impl.AccessConfigLogicImpl validPasswordMessage "{params}" -b -x 3
watch com.ewei.web.controller.account.EngineerController doEngineerInit "{params, returnObj}" -b
关于线程
查看所有线程
thread
查看最忙的前n个线程并打印堆栈
thread -n 3