JVM-Arthas高效的监控工具

一、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 功能.

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 ![](https://file.jishuzhan.net/article/1745651443483807745/c95effcdd786d711894b3b83f3641c66.webp) \[s\] -在函数调用之前观测 命令:watch demo.MathGame primeFactors -x 2 -s ![](https://file.jishuzhan.net/article/1745651443483807745/98e76f4bff8e3a224ece027987cb587e.webp) 注:目前watch命令好像不能同时既看入参也看出参,即不能同时使用-b和-s命令,只会显示一个出参或入参。 仅观测函数调用入库的参数和返回值 命令:watch demo.MathGame primeFactors "{params,returnObj}" -x 2 -b ![](https://file.jishuzhan.net/article/1745651443483807745/4904e777855d44d4e815655b5257b161.webp) 总结,arthas的命令很多,此处仅讲了一些常用的,其他具体需要看帮助手册。 六、绘制火焰图 ![](https://file.jishuzhan.net/article/1745651443483807745/5385f79e70732b0c068a208b94b47872.webp) ![](https://file.jishuzhan.net/article/1745651443483807745/5c82fe858cba15267e874727449201ed.webp) 启动profiler 命令:profiler start ![](https://file.jishuzhan.net/article/1745651443483807745/5e0bffa37ee91f6c0d08036a68251c38.webp) 获取已采集的sample的数量 命令:profiler getSamples ![](https://file.jishuzhan.net/article/1745651443483807745/3295d094d11d3545664e4b91b8b86c51.webp) 停止profiler 命令:profiler stop --format html ![](https://file.jishuzhan.net/article/1745651443483807745/bd58f2f01ddc8ead8d87af3dec50e02a.webp) 默认情况下,arthas 使用 3658 端口,则可以打开: [http://localhost:3658/arthas-output/在新窗口打开](http://localhost:3658/arthas-output/ "http://localhost:3658/arthas-output/在新窗口打开") 查看到`arthas-output`目录下面的 profiler 结果: 命令:http://localhost:3658/arthas-output/ 还有一种打开方式,进入html的存放目录,直接打开。 ![](https://file.jishuzhan.net/article/1745651443483807745/f2f17ea7488d53292e51496c12fed787.webp) ![](https://file.jishuzhan.net/article/1745651443483807745/58e945602d5ad5bbb360655ec02acc72.webp) 怎么看有没有问题呢,看一张死锁的火焰图 ![](https://file.jishuzhan.net/article/1745651443483807745/483954302a604173a8704e0786ed8e4a.webp)

相关推荐
Victor35641 分钟前
Redis(25)Redis的RDB持久化的优点和缺点是什么?
后端
Victor35642 分钟前
Redis(24)如何配置Redis的持久化?
后端
BD_Marathon5 小时前
【Flink】部署模式
java·数据库·flink
鼠鼠我捏,要死了捏8 小时前
深入解析Java NIO多路复用原理与性能优化实践指南
java·性能优化·nio
ningqw8 小时前
SpringBoot 常用跨域处理方案
java·后端·springboot
你的人类朋友8 小时前
vi编辑器命令常用操作整理(持续更新)
后端
superlls8 小时前
(Redis)主从哨兵模式与集群模式
java·开发语言·redis
胡gh8 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试
一只叫煤球的猫9 小时前
看到同事设计的表结构我人麻了!聊聊怎么更好去设计数据库表
后端·mysql·面试
uzong9 小时前
技术人如何对客做好沟通(上篇)
后端