简介
Arthas 是Alibaba开源的Java诊断工具
当你遇到以下类似问题而束手无策时,Arthas
可以帮助你解决:
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到JVM的实时运行状态?
Arthas
采用命令行交互模式,同时提供丰富的 Tab
自动补全功能,进一步方便进行问题的定位和诊断。
使用示例
# 使用运行Java应用的用户去启动Arthas
# 帮助
help
watch -help
# 查看cpu占用高的前3个线程
thread -n 3
# 跟踪某个方法的调用时间,显示方法调用时间,找出最慢的方法
trace 包名.类名 方法名
注:
1. 浏览器开发控制台先超出慢的请求,然后找到Controller,监控此Controller的方法,找出慢的方法
2. 找到慢的方法后,继续使用trace跟踪内部的方法
# 查看某方法,调用时的入参和返回值
watch -b org.apache.commons.lang.StringUtils isBlank params
watch -f org.apache.commons.lang.StringUtils isBlank returnObj
# 反编译正在运行的类
jad javax.servlet.Servlet
# 查看方法的调用堆栈
stack 包名.类名 方法名
# 查找JVM中已经加载的类
sc -d org.springframework.web.context.support.XmlWebApplicationContext
# 了解当前系统中有多少类加载器,以及每个加载器加载的类数量,帮助您判断是否有类加载器泄露
classloader