使用arthas工具
arthas是Alibaba开源的Java诊断工具。arthas可以帮助我们解决一下问题:
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到JVM的实时运行状态?
- 怎么快速定位应用的热点,生成火焰图?
如果需要查看更多内容,请访问arthas官网。
监听java进程
#监听某个进程,需要手动指定序列号
java -jar arthas-boot.jar
#按名称监听某个进程
java -jar arthas-boot.jar --select com.Application
命令执行结果如下:
dashboard命令
使用dashborard命令可以动态查看查看java程序的线程信息,内存等信息。
#查看pid对应的进程信息
dashboard pid
命令执行结果如下:
thread命令
使用thread命令可以查看线程的状态,线程的栈信息。
#查看线程对应的栈信息
thread pid
命令执行结果如下:
jad命令
使用jad命令可以反编译class文件的信息。
#反编译 class文件
jad classname
命令执行结果如下:
monitor命令
使用monitor命令可以监控方法的成功和失败执行次数,非实时返回。
#-c表达循环周期,这里指定的是5s
monitor -c 5 class method
trace命令
使用trace命令,可以查看方法内部的调用路径和方法耗时,消耗时间最长的方法会用红色标记。
trace class method
#次数调用限制
trace class method run -n 1
#执行时间调用限制
trace class method run '#cost > 10'
watch命令
使用watch命令可以查看方法执行时的入参,返回值,异常等信息,并且也可以选择监听的时机,如方法执行之前,方法执行之后。
#查看方法返回值
watch class method returnObj
#查看方法入参和返回值
watch class method "{params,returnObj}"
#查看异常时的方式信息
watch class method "{params[0],throwExp}" -e
heapdump命令
我们可以使用heapdump来导出java程序的堆dump信息,导出来的hprof可以使用jhat命令和jvisualvm工具查看。
heapdump filename.hprof
异步任务
#查看正在运行的任务
jobs
#将后台任务转为前台
fg 序号
#将前台任务转为后台
bg 序号
#后台执行任务,使用&
trace class method &
webConsole
默认地址为:http://127.0.0.1:3658/。
exit命令
使用exit命令,即可退出arthas。
jvm命令
使用jvm命令,查看当前 JVM 的信息