java服务器调试工具arthas简单实用笔记
arthas官方网站下载地址
https://arthas.aliyun.com/doc/en/download.html
arthas安装
- 首先从上面官网上下载arthas的zip工具包
2.将下载后的zip包放到服务器任意位置进行解压(unzip)
3.可以先根据ps -ef|grep tomcat 命令查看tomcat服务的进程,再启动arthas-boot.jar服务(注:需要使用jdk运行jar文件)
如上图所示,已经启动成功,下面讲下几种常用的调试命令。
arthas常用调试命令
watch 让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。
例:watch com.xxx.framework.settingapi.service.IConfigDictController getDictValuesByTag ‘{params,returnObj,throwExp}’ -n 5 -x 3
- com.xxx.framework.settingapi.service.IConfigDictController (类名表达式匹配)
- getDictValuesByTag (方法名表达式匹配)
- ‘{params,returnObj,throwExp}’ (观察表达式,默认值:{params, target, returnObj})
- -n 5 (观察5次)
- -x 3 (参数或返回值数据结构深度为3)
trace 方法内部调用路径,并输出方法路径上的每个节点上耗时
例: trace com.xxx.systemsetting.core.service.impl.AuthorizeServiceImpl checkPlaceAuthInfoAndDeadline -n 5 --skipJDKMethod false
- com.xxx.systemsetting.core.service.impl.AuthorizeServiceImpl (类名表达式匹配)
- checkPlaceAuthInfoAndDeadline (方法名表达式匹配)
- -n 5 (观察5次)
jad 命令将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码,便于你理解业务逻辑
例: jad com.xxx.systemsetting.core.service.impl.AuthorizeServiceImpl checkPlaceAuthInfoAndDeadline
- com.xxx.systemsetting.core.service.impl.AuthorizeServiceImpl (类名表达式匹配)
- checkPlaceAuthInfoAndDeadline (方法名表达式匹配)
dashboard 当前系统的实时数据面板,按 ctrl+c 退出
redefine 文件路径/class文件名 例:redefine /home/operation-support-group/order-service-logs/AsyncSend.class
该命令用于热部署文件,但是需要注意,需要新部署的文件,不能有新增的方法,或者删除原有方法。
arthas应该是没有进行类型卸载,所以新增或者删除方法会让类型信息(class对象)匹配不上从而报错。
jad 文件路径/文件名 - 反编译, 例子:jad com.fescotech.ordermanage.execute.asyncSend.AsyncSend
thread - 查看线程信息 , thread -b 查询当前服务有无死锁
quit 退出当前用户命令
stop 退出所有用户,并且关闭arthas服务。
IDEA开发工具中可下载 arthas idea插件,进行常用命令的生成,如下图:
插件下载后,选中需要查看的方法、或者类,右键点击,就会生成下图所示的选项,选中后会自动生成命令的复制信息。
以上为部分常用指令,更多指令请到官网查看。