内存排查(三)-使用arthas工具

使用arthas工具

arthas是Alibaba开源的Java诊断工具。arthas可以帮助我们解决一下问题:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?

如果需要查看更多内容,请访问arthas官网

监听java进程

#监听某个进程,需要手动指定序列号
java -jar arthas-boot.jar

#按名称监听某个进程
java -jar arthas-boot.jar --select com.Application

命令执行结果如下:

按名称监听某个进程

dashboard命令

使用dashborard命令可以动态查看查看java程序的线程信息,内存等信息。

#查看pid对应的进程信息
dashboard pid

命令执行结果如下:

dashboard

thread命令

使用thread命令可以查看线程的状态,线程的栈信息。

#查看线程对应的栈信息
thread pid

命令执行结果如下:

thread命令

jad命令

使用jad命令可以反编译class文件的信息。

#反编译 class文件
jad classname

命令执行结果如下:

jad命令

monitor命令

使用monitor命令可以监控方法的成功和失败执行次数,非实时返回。

#-c表达循环周期,这里指定的是5s
monitor -c 5 class method

monitor命令

trace命令

使用trace命令,可以查看方法内部的调用路径和方法耗时,消耗时间最长的方法会用红色标记。

trace class method 

#次数调用限制
trace class method run -n 1

#执行时间调用限制
trace class method run '#cost > 10'

trace命令

watch命令

使用watch命令可以查看方法执行时的入参,返回值,异常等信息,并且也可以选择监听的时机,如方法执行之前,方法执行之后。

#查看方法返回值
watch class method returnObj

#查看方法入参和返回值
watch class method "{params,returnObj}"

#查看异常时的方式信息
 watch class method "{params[0],throwExp}" -e

watch命令

heapdump命令

我们可以使用heapdump来导出java程序的堆dump信息,导出来的hprof可以使用jhat命令和jvisualvm工具查看。

heapdump filename.hprof

heapdum命令

异步任务

#查看正在运行的任务
jobs

#将后台任务转为前台
fg 序号

#将前台任务转为后台
bg 序号

#后台执行任务,使用&
trace class method &

异步任务

webConsole

默认地址为:http://127.0.0.1:3658/。

exit命令

使用exit命令,即可退出arthas。

jvm命令

使用jvm命令,查看当前 JVM 的信息

博主微信公众号

posted on 2020-08-28 00:59  幕友皎敖奔乾  阅读(8381)  评论(0编辑  收藏  举报

导航