jad反编译
- 检查线上代码是否修改成功,例如修改interface后看Jar包是否引入新的,或者代码是否最新的。
jad com.zhenai.counseling.business.provider.facade.supremecourse.RedeemRecordFacadeImpl
jad --source-only com.zhenai.counseling.business.api.service.supremecourse.impl.SupremeCourseServiceImpl
watch命令查看函数入参,返回值
watch com.zhenai.counseling.business.provider.facade.supremecourse.RedeemRecordFacadeImpl canRedeem {params,returnObj} -x 2
watch com.zhenai.counseling.business.provider.facade.supremecourse.RedeemRecordFacadeImpl canRedeem {params,returnObj} '#cost>200' -x 2
watch com.zhenai.counseling.business.provider.facade.supremecourse.RedeemRecordFacadeImpl canRedeem {params,returnObj} -x 4
ts=2021-07-06 16:21:05; [cost=12.879504ms] result=@ArrayList[@Object[][@Long[156],],@Boolean[false],
]
- cost 标识耗时
- result 是整个watch命令的返回,我们监控的是入参,返回值,其中object是入参,boolean是返回值,按照你设置{params,returnObj} 的顺序返回
- 最常用的方法,用于微服务接口数据排查,当有多个provider接口调用时候,可以逐个排查每个provider是否正常
thread繁忙的n个线程
thread -n 5
thread -b
- 打印出最忙的n 个线程的堆栈信息。
- 这里的cpu使用率与linux 命令top -H -p 的线程%CPU类似,一段采样间隔时间内,当前JVM里各个线程的增量cpu时间与采样间隔时间的比例。
- 可直接打印对应id thread id 即可,打印阻塞线程,在排查计算密集型引用导致的CPU资源不够情况下,排查具体那个业务线程耗CPU资源比较高。
系统相关
jvm
sysprop
sysenv
logger
查看类的静态属性
getstatic com.zhenai.counseling.business.api.consumer.OnlinePayCallBackConsumer logger
- 此处我用的Logger来做实验,实际生产中可以对具体类中的静态属性 进行监控,比如是一个Map,List等复杂数据结构,很好排查问题
sc 查看已经加载的类
sc com.zhenai.counseling.business.api.consumer.*
sc -d com.zhenai.counseling.business.api.consumer.OnlinePayCallBackConsumer
sm查看方法详细信息
sm -d com.zhenai.counseling.business.api.consumer.OnlinePayCallBackConsumer consume
方法调用监控
monitor -c 5 com.zhenai.counseling.business.api.service.supremecourse.impl.SupremeCourseServiceImpl courses
耗时检测神器trace
trace com.zhenai.counseling.business.api.service.supremecourse.impl.SupremeCourseServiceImpl courses
trace com.zhenai.counseling.business.api.service.supremecourse.impl.SupremeCourseServiceImpl courses '#cost > 10'
- 对方法调用链路上每个节点的时间进行监控,类似pingpoint的一个输出,检测超时接口必备神器