中企动力 网站推广,一级域名免费申请,如何把自己电脑做网站服务器,网站私信界面最近对 JVM 技术知识进行了重新整理#xff0c;再次献上 JVM系列文章合集索引#xff0c;感兴趣的小伙伴可以直接点击如下地址快速阅读。 JVM系列(一) -什么是虚拟机JVM系列(二) -类的加载过程JVM系列(三) -内存布局详解JVM系列(四) -对象的创建过程JVM系列(五) -对象的内存分… 最近对 JVM 技术知识进行了重新整理再次献上 JVM系列文章合集索引感兴趣的小伙伴可以直接点击如下地址快速阅读。 JVM系列(一) -什么是虚拟机JVM系列(二) -类的加载过程JVM系列(三) -内存布局详解JVM系列(四) -对象的创建过程JVM系列(五) -对象的内存分配流程JVM系列(六) -运行期优化技术JVM系列(七) -垃圾收集算法JVM系列(八) -垃圾收集器JVM系列(九) -GC日志分析JVM系列(十) -常用调优命令汇总JVM系列(十一) -常用调优工具介绍JVM系列(十二) -常用调优参数总结
一、摘要
在之前的文章中我们介绍了 JVM 常用的命令使用通过这些命令可以快速的查询线上服务的性能情况和排查相关的问题。
不错命令确实非常的管用但是要想熟悉的记住这些命令并非易事除非很频繁的使用否则真的很难。多数情况下如果代码编程合理服务器配置合理服务也没有高并发压力开发人员基本上很少会去关注 JVM 相关性能情况。
因此对于绝大部分开发者而言都希望有一个可视化的界面来展示当前服务的性能指标当需要的时候直接将线上服务的 dump 文件导出然后导入到相关工具中通过界面来查询分析结果而不是通过枯燥的命令来快速排查服务故障。
下面我们就一起来看看几款比较优秀的 JVM 可视化分析工具。
二、JDK 自带的工具
2.1、jconsole
jconsole 是一款 JDK 自带的可视化监控工具可以用于查看应用程序的运行概况、内存、线程、类、VM 概括、MBean 等信息。它是一个基于 JMXjava management extensions的 GUI 性能监测工具从 JDK1.5 开始加入。
2.1.1、启动方式
在命令行输入jconsole即可启动。如果 Windows 用户也可以在 jdk 的安装目录的 bin 目录下找到jconsole.exe双击启动。界面如下。 可以直接选择本地 JVM也可以通过 JMX 方式连接远程 JVM。
如果监控远程服务比如 tomcat 服务可以在启动脚本中添加如下代码以便支持远程连接。
-Dcom.sun.management.jmxremote.port6969 -Dcom.sun.management.jmxremote.sslfalse -Dcom.sun.management.jmxremote.authenticatefalse点击连接之后可能会弹出如下的界面选择“不安全的连接”即可。 进入之后就可以看到 jconsole 概览图和主要的功能例如概述、内存、线程、类、VM、MBean 等板块。概览界面如下。 2.1.2、内存板块
内存板块主要展示了内存的使用情况同时可以查看堆和非堆内存的变化值对比也可以点击执行 GC 来触发 GC 的执行。界面如下。 2.1.3、线程板块
线程板块主要展示线程数的活动数和峰值点击左下方线程可以查看线程的详细信息比如线程的状态是什么堆栈内容等同时也可以点击“检测死锁”来检查线程之间是否有死锁的情况。界面如下。 2.1.4、类板块
类板块主要展示已加载的类数量。界面如下。 2.1.5、VM 概要板块
VM 概要板块主要展示 JVM 所有信息总览包括基本信息、线程相关、堆相关、操作系统、VM 参数等。界面如下。 2.1.6、MBean 板块
MBean 板块主要展示被管理的 Bean 的属性方法等。界面如下。 2.2、VisualVM
VisualVM 也是一款 JDK 自带的可视化监控工具利用它不仅能够监控服务的 CPU、内存、线程、类等信息还可以捕获有关 JVM 软件实例的数据并将该数据保存到本地系统以供后期查看或与其他用户共享从 JDK1.6 开始加入。
与此同时VisualVM 使用也很简单几乎 0 配置功能比较丰富几乎囊括了 JDK 自带命令的所有功能也是平时使用最多的调优工具之一。
2.2.1、启动方式
在命令行输入jvisualvm即可启动。如果 Windows 用户也可以在 jdk 的安装目录的 bin 目录下找到jvisualvm.exe双击启动。界面如下。 可以直接选择本地 JVM也可以远程连接 JVM。这里选择本地 JVM 进程双击某个进程即可打开。
进入之后就可以看到 VisualVM 相关的展示界面例如概述、监视、线程、抽样器等板块。概述界面如下。 2.2.2、监视板块
监视板块主要展示 cpu、内存、线程、类的统计图表也支持手动执行垃圾回收和生成堆 Dump 文件。界面如下。 点击“堆 Dump”按钮之后就会生成一份当前时刻的堆文件快照在界面上可以查询当前文件的对象大小分析结果。界面如下。 同时还支持与另一个堆文件进行比较展示差异信息。界面如下。 2.2.3、线程板块
线程板块主要展示线程的活动数。界面如下。 点击“线程 Dump”按钮之后就会生成一份当前时刻的线程快照在界面上可以查询线程的状态。界面如下。 2.2.4、抽样器板块
抽样器板块可以对 CPU、内存在一段时间内进行数据抽样以供分析。界面如下。 比如点击“CPU”按钮之后可以实时的查询线程和方法占用 CPU 时间长短排名点击“停止”按钮即可结束抽样。 同理点击“内存”按钮之后可以实时的查询堆中对象占用大小排名以及每个线程分配的内存大小排名。 2.2.5、插件安装
VisualVM 还有一大亮点就是它支持插件安装。每个插件的关注点都不同有的是监控 GC有的是监控内存有的是监控线程等可以在插件市场上寻找对应的工具进行安装以便更好的排查服务性能问题。
如何安装插件呢
在 VisualVM 的菜单栏点击“工具” -》 “插件”便会弹出如下界面。 在“可用插件”栏中选中需要安装的插件点击“安装”一路完成最后重启 VisualVM即可完成插件的安装。
如果获取可用插件异常可以访问如下地址找到对应版本范围包含安装 JDK 版本的链接。
https://visualvm.github.io/pluginscenters.html拷贝出对应的链接然后在设置栏中填入对应的地址即可。 通常我们会将 Visual GC 插件安装到 VisualVM 中利用它可以更加直观的观察到整个垃圾回收的过程。界面如下。 三、第三方调优工具
除了 JDK 自带的 JVM 可视化分析工具之外市场上还诞生了很多比较优秀的性能监控工具比如下面这几款工具。
MAT一款功能强大的 Java 堆内存分析器可以用于查找内存泄漏以及查看内存消耗情况用户可以利用 visualvm 或者是 jmap 命令生产堆文件然后导入工具中进行分析GCeasy一款在线的 GC 日志分析器使用起来非常方便用户可以通过它的 web 网站导入 GC 日志实时进行内存泄漏检测、GC 暂停原因分析、JVM 配置建议优化等功能GCViewer一款非常强大的 GC 日志可视化分析工具功能强大而且完全免费JProfiler一款商用的性能分析利器arthas阿里开源的一款线上监控诊断工具可以查看应用负载、内存、gc、线程等信息
在此我们重点的介绍一下 Arthas 这款工具因为它的功能比较全并且文档详细。
3.1、Arthas
根据官方的介绍Arthas阿尔萨斯是一款线上监控诊断产品通过全局视角实时查看应用 load、内存、gc、线程的状态信息并能在不修改应用代码的情况下对业务问题进行诊断包括查看方法调用的出入参、异常监测方法执行耗时类加载信息等大大提升线上问题排查效率。
Arthas 官方地址如下
https://arthas.aliyun.com/3.1.1、启动方式
Arthas 的启动方式非常简单它就是一个 jar 包通过java -jar命令即可运行。
jar 包的下载地址如下。
https://arthas.aliyun.com/arthas-boot.jar输入如下命令即可启动 Arthas。 java -jar arthas-boot.jar启动成功后可以看到如下界面。 意思是发现有以下几个 Java 应用服务请选择想要监控的进程输入前面对应的编号就可以开启进行监控模式了。比如我输入编号 1。 进入以上这个界面就表示应用监听成功了。
3.1.2、dashboard仪表盘
dashboard 仪表盘用于展示整体项目运行情况可以在命令窗口输入如下命令来查看。
dashboard回车之后一共有三块信息分别是线程信息、内存信息、运行时信息界面如下。 3.1.3、thread 命令
如果我们想要具体查看某一个线程的运行情况可以使用 thread 命令。例如查询线程 Id 为16的运行状态信息命令如下。
thread 16还可以通过如下命令查询所有的线程信息。
thread -all3.1.4、jad 命令
某些时候我们想要查询线上的源码是否正确发布可以通过 jad 命令来反编译类以此来查询源码信息例如反编译Application类命令如下。
jad com.example.boot.Application3.1.5、watch 命令
某些场景下我们想要观察某个方法的返回结果以便判断是否符合预期效果可以通过 watch 命令来实现例如观察TestController类的queryAll()方法的返回结果命令如下。
watch com.example.boot.test.web.TestController queryAll returnObj需要前端发起请求如果执行到这里就会有数据。输出示例结果如下。 更多的玩法可以阅读官方文档。
四、小结
本文主要围绕 JVM 相关的可视化分析工具进行了知识内容的整合和总结内容比较多如果有描述不对的地方欢迎大家留言指出不胜感激。
五、参考
1.http://www.ityouknow.com/jvm/2017/09/22/jvm-tool.html
2.https://arthas.aliyun.com/doc/
写到最后
最后。如果感觉文章内容不错帮忙动动小指头点个赞点赞对我真的非常重要加个关注我会非常感激