一、前言:
Arthas可以帮助你解决:
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
改的代码为什么没有执行到?难道是没 commit?分支搞错了?
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
是否有一个全局视角来查看系统的运行状况?
有什么办法可以监控到JVM的实时运行状态?
怎么快速定位应用的热点,生成火焰图?
二、Arthas使用
1.在后台应用同路径下上传Arthas完整包(离线)
如果是Docker部署的应用,需要把arthas copy到容器中,如下图:
2.启动arthas
java -jar arthas-boot.jar
3.Arthas相关命令
(1)help : 可以获取到更多的帮助信息
(2)dashboard :可以查看当前系统的实时数据面板。数据面板默认5秒刷新一次。可以 输入Q
后回车 或 Ctrl+C
退出
(3)thread :后面加上线程ID会打印线程的栈。Arthas支持管道,可以用 thread 1 | grep ‘main(’ 查找到arthas-demo应用的main class
thread -b:死锁线程查看
thread --state WAITING:查看处于等待状态的线程
thread -n 3 :查看哪个线程占用CPU高
(4)sc :用来查找JVM里已加载的类。例如查看名称为MathGame的类:sc -d *MathGame
(5)j
ad :用来反编译代码 。例如查看MathGame类的源代码:jad demo.MathGame
(6)watch:可以查看函数的参数/返回值/异常信息。例子:watch cn.com.shentie.rpum.web.pump.SkylightPlanApplyController querySkylightPlanApplyList "{params,returnObj}" -x 9
(7)session :查看当前会话信息
(8)jvm:查看Jvm虚拟机信息
(9)trace 命令查看接口耗时:trace 类地址.类名 方法名
例子:trace cn.com.shentie.security.mybatis.hiddentrouble.facade.HitrInvestigateReportFacade saveByDept