JVM-Arthas高效的监控工具

一、arthas介绍

JVM-Arthas高效的监控工具_第1张图片

JVM-Arthas高效的监控工具_第2张图片

JVM-Arthas高效的监控工具_第3张图片

JVM-Arthas高效的监控工具_第4张图片

3.选择监控哪个进程

JVM-Arthas高效的监控工具_第5张图片

4.进入具体进程

JVM-Arthas高效的监控工具_第6张图片

二、arthas的基础命令与基本操作

JVM-Arthas高效的监控工具_第7张图片

1.查询包含Java的系统属性:

命令:sysprop |grep java

JVM-Arthas高效的监控工具_第8张图片

1.查询不含Java的系统属性:

命令:sysprop | grep -v java

JVM-Arthas高效的监控工具_第9张图片

3.打印历史命令

命令:history

JVM-Arthas高效的监控工具_第10张图片

4.查看当前工作目录

命令:pwd

JVM-Arthas高效的监控工具_第11张图片

三、如何使用arthas监控线上服务的内存状态

JVM-Arthas高效的监控工具_第12张图片

1.dashboard - 当前系统的实时数据面板

JVM-Arthas高效的监控工具_第13张图片

JVM-Arthas高效的监控工具_第14张图片

命令:dashboard -i 100    100毫秒刷新一次

JVM-Arthas高效的监控工具_第15张图片

命令:dashboard -n 2 刷新两次

JVM-Arthas高效的监控工具_第16张图片

命令:dashboard -n 2 -i 1000 每1秒刷新一次共刷新两次

JVM-Arthas高效的监控工具_第17张图片

2.thread - 查看当前线程信息,查看线程的堆栈

支持一键展示当前最忙的前N个线程并打印堆栈

命令:thread -n 3

JVM-Arthas高效的监控工具_第18张图片

当没有参数时,显示第一页线程的信息

命令:thread

JVM-Arthas高效的监控工具_第19张图片

显示指定线程的运行堆栈

命令:thread id

JVM-Arthas高效的监控工具_第20张图片

查看阻塞的线程

命令:thread -b

JVM-Arthas高效的监控工具_第21张图片

3.heapdump - dump java heap, 类似 jmap 命令的 heap dump 功能.

dump 到指定文件

命令:heapdump arthas-output/dump.hprof

4.jvm - 查看当前JVM信息

命令: jvm

JVM-Arthas高效的监控工具_第22张图片

5.memory - 查看JVM内存信息

命令:memory

JVM-Arthas高效的监控工具_第23张图片

六、如何使用arthas监控载入的类信息screenflow

JVM-Arthas高效的监控工具_第24张图片

1.classloader - 查看classloader的继承树、urls、类加载信息

命令:classloader

JVM-Arthas高效的监控工具_第25张图片

大白话:

        系统使用的类加载器种类,每种加载器创建实例数量(numberOfInstances)、加载类数量(loadedCountTotal)

2.jad - 反编译指定已加载类的源码,这个命令就可以检查线上的类是不是最新的代码

命令:jad java.lang.String

JVM-Arthas高效的监控工具_第26张图片

解释:

        代码是反编译出来的,可能有些代码的位置会有所变化。

3.sc - 查看JVM已加载的类信息,还具备搜索功能

搜索java.lang包下的类

命令:sc java.lang.*

JVM-Arthas高效的监控工具_第27张图片

搜索所有包下的MathGame类

命令: sc *.MathGame

搜索所有包下的MathGame类并且查看类的信息

命令: sc -d *.MathGame

JVM-Arthas高效的监控工具_第28张图片

大白话:

        -d 类的信息

        -f 类方法的信息

4.sm - 查看已加载类的方法信息

查看java.lang.String的方法信息

命令: sm java.lang.String

JVM-Arthas高效的监控工具_第29张图片

五、如何使用arthas追踪方法的执行情况screenflow

JVM-Arthas高效的监控工具_第30张图片

1.monitor - 方法执行监控

JVM-Arthas高效的监控工具_第31张图片命令:monitor -c 5 demo.MathGame primeFactors

JVM-Arthas高效的监控工具_第32张图片

2.watch - 函数执行数据观测

观测demo包下MathGame类的primeFactors方法,-x 输出结果的属性遍历深度

1 - 第一级别,显示入参、出参的类型

命令:watch demo.MathGame primeFactors -x 1

JVM-Arthas高效的监控工具_第33张图片

2 - 第二级别,显示入参、出参的具体数据

命令:watch demo.MathGame primeFactors -x 2

JVM-Arthas高效的监控工具_第34张图片

3 - 第三级别,显示方法值的具体数据更加详细

命令:watch demo.MathGame primeFactors -x 3

JVM-Arthas高效的监控工具_第35张图片

4 - 第四级别,显示方法值的具体数据更加详细,更底层,一般用不到

命令:watch demo.MathGame primeFactors -x 4

JVM-Arthas高效的监控工具_第36张图片

[b] -在函数调用之前观测

命令:watch demo.MathGame primeFactors -x 2 -b

JVM-Arthas高效的监控工具_第37张图片

[s] -在函数调用之前观测

命令:watch demo.MathGame primeFactors -x 2  -s

JVM-Arthas高效的监控工具_第38张图片

注:目前watch命令好像不能同时既看入参也看出参,即不能同时使用-b和-s命令,只会显示一个出参或入参。

仅观测函数调用入库的参数和返回值

命令:watch demo.MathGame primeFactors "{params,returnObj}" -x 2 -b

JVM-Arthas高效的监控工具_第39张图片

总结,arthas的命令很多,此处仅讲了一些常用的,其他具体需要看帮助手册。

六、绘制火焰图

JVM-Arthas高效的监控工具_第40张图片

JVM-Arthas高效的监控工具_第41张图片

启动profiler

命令:profiler start

JVM-Arthas高效的监控工具_第42张图片

获取已采集的sample的数量

命令:profiler getSamples

JVM-Arthas高效的监控工具_第43张图片

停止profiler

命令:profiler stop --format html

JVM-Arthas高效的监控工具_第44张图片

默认情况下,arthas 使用 3658 端口,则可以打开: http://localhost:3658/arthas-output/在新窗口打开 查看到arthas-output目录下面的 profiler 结果:

命令:http://localhost:3658/arthas-output/

还有一种打开方式,进入html的存放目录,直接打开。

JVM-Arthas高效的监控工具_第45张图片

JVM-Arthas高效的监控工具_第46张图片

怎么看有没有问题呢,看一张死锁的火焰图

JVM-Arthas高效的监控工具_第47张图片

你可能感兴趣的:(Java,jvm,java,后端)