一、arthas介绍
3.选择监控哪个进程
4.进入具体进程
二、arthas的基础命令与基本操作
1.查询包含Java的系统属性:
命令:sysprop |grep java
1.查询不含Java的系统属性:
命令:sysprop | grep -v java
3.打印历史命令
命令:history
4.查看当前工作目录
命令:pwd
三、如何使用arthas监控线上服务的内存状态
1.dashboard - 当前系统的实时数据面板
命令:dashboard -i 100 100毫秒刷新一次
命令:dashboard -n 2 刷新两次
命令:dashboard -n 2 -i 1000 每1秒刷新一次共刷新两次
2.thread - 查看当前线程信息,查看线程的堆栈
支持一键展示当前最忙的前N个线程并打印堆栈:
命令:thread -n 3
当没有参数时,显示第一页线程的信息
命令:thread
显示指定线程的运行堆栈
命令:thread id
查看阻塞的线程
命令:thread -b
3.heapdump - dump java heap, 类似 jmap 命令的 heap dump 功能.
命令:heapdump arthas-output/dump.hprof
4.jvm - 查看当前JVM信息
命令: jvm
5.memory - 查看JVM内存信息
命令:memory
六、如何使用arthas监控载入的类信息screenflow
1.classloader - 查看classloader的继承树、urls、类加载信息
命令:classloader
大白话:
系统使用的类加载器种类,每种加载器创建实例数量(numberOfInstances)、加载类数量(loadedCountTotal)
2.jad - 反编译指定已加载类的源码,这个命令就可以检查线上的类是不是最新的代码
命令:jad java.lang.String
解释:
代码是反编译出来的,可能有些代码的位置会有所变化。
3.sc - 查看JVM已加载的类信息,还具备搜索功能
搜索java.lang包下的类
命令:sc java.lang.*
搜索所有包下的MathGame类
命令: sc *.MathGame
搜索所有包下的MathGame类并且查看类的信息
命令: sc -d *.MathGame
大白话:
-d 类的信息
-f 类方法的信息
4.sm - 查看已加载类的方法信息
查看java.lang.String的方法信息
命令: sm java.lang.String
五、如何使用arthas追踪方法的执行情况screenflow
1.monitor - 方法执行监控
命令:monitor -c 5 demo.MathGame primeFactors
2.watch - 函数执行数据观测
观测demo包下MathGame类的primeFactors方法,-x 输出结果的属性遍历深度
1 - 第一级别,显示入参、出参的类型
命令:watch demo.MathGame primeFactors -x 1
2 - 第二级别,显示入参、出参的具体数据
命令:watch demo.MathGame primeFactors -x 2
3 - 第三级别,显示方法值的具体数据更加详细
命令:watch demo.MathGame primeFactors -x 3
4 - 第四级别,显示方法值的具体数据更加详细,更底层,一般用不到
命令:watch demo.MathGame primeFactors -x 4
[b] -在函数调用之前观测
命令:watch demo.MathGame primeFactors -x 2 -b
[s] -在函数调用之前观测
命令:watch demo.MathGame primeFactors -x 2 -s
注:目前watch命令好像不能同时既看入参也看出参,即不能同时使用-b和-s命令,只会显示一个出参或入参。
仅观测函数调用入库的参数和返回值
命令:watch demo.MathGame primeFactors "{params,returnObj}" -x 2 -b
总结,arthas的命令很多,此处仅讲了一些常用的,其他具体需要看帮助手册。
六、绘制火焰图
启动profiler
命令:profiler start
获取已采集的sample的数量
命令:profiler getSamples
停止profiler
命令:profiler stop --format html
默认情况下,arthas 使用 3658 端口,则可以打开: http://localhost:3658/arthas-output/在新窗口打开 查看到arthas-output
目录下面的 profiler 结果:
命令:http://localhost:3658/arthas-output/
还有一种打开方式,进入html的存放目录,直接打开。
怎么看有没有问题呢,看一张死锁的火焰图