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)

相关推荐
蒸蒸yyyyzwd3 小时前
cpp对象模型学习笔记1.1-2.8
java·笔记·学习
qq_297574673 小时前
【实战教程】SpringBoot 集成阿里云短信服务实现验证码发送
spring boot·后端·阿里云
程序员徐师兄4 小时前
Windows JDK11 下载安装教程,适合新手
java·windows·jdk11 下载安装·jdk11 下载教程
RANCE_atttackkk4 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
五岳5 小时前
DTS按业务场景批量迁移阿里云MySQL表实战(下):迁移管理平台设计与实现
java·应用·dts
一起养小猫5 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
韩立学长5 小时前
【开题答辩实录分享】以《智能大学宿舍管理系统的设计与实现》为例进行选题答辩实录分享
数据库·spring boot·后端
zhougl9965 小时前
Java 所有关键字及规范分类
java·开发语言
Python 老手5 小时前
Python while 循环 极简核心讲解
java·python·算法
java1234_小锋5 小时前
Java高频面试题:MyISAM索引与InnoDB索引的区别?
java·开发语言