【JVM 监控工具】JVisualVM的使用

文章目录

  • 前言
  • 二、启动JVisualVM
  • 三、安装插件
  • 四、使用

前言

JVisualVM是一个Java虚拟机的监控工具,要是需要对JVM的性能进行监控可以使用这个工具哦

使用这个工具,你就可以监控到java虚拟机的gc过程了

那么,这么强大的工具怎么下载呢?

在JDK1.6后的版本是自带这个工具,它就在你的jdk的bin目录上

在这里插入图片描述

如果是默认安装的JDK,一般就在C盘,Program Files的java目录,就会看到你的jdk版本,点进去之后打开bin这个文件夹,就可以看到这个软件了

二、启动JVisualVM

启动方法:

1.进入jdk安装目录的bin目录,双击打开这个程序

2.菜单键+R,输入cmd进入命令行模式,输入命令jvisualvm 启动程序。注:要是使用命令行启动的软件,命令框可不能关闭哦,关闭了的话JVisualVM也会被关闭,切记切记!!!

在这里插入图片描述
在这里插入图片描述
启动程序之后进入这个界面,这个就是JVisualVM的使用界面了

在这里插入图片描述

三、安装插件

使用之前,我们需要安装一个插件,来更好的来观察虚拟机的性能,点击上方的工具-插件

在这里插入图片描述

在可用插件那里选择下载,安装一个VIsual GC的插件

在这里插入图片描述
在这里插入图片描述

一般会报错,因为默认的链接已经给转移了,需要在设置那里把默认的链接更改

点击设置,编辑,把URL更改一下

在这里插入图片描述
在这里插入图片描述

那URL填什么呢?先确定一下自己的jdk版本号,然后用以下链接去查看URL

确认版本号,可以菜单键+R,执行cmd,输入java -version来查看自己的版本号

在这里插入图片描述

比如我的是201

那就在这个网站:https://visualvm.github.io/pluginscenters.html
找到自己版本号的地址,复制URL到设置那里
在这里插入图片描述

比如我的是JDK8的201,所以应该是131-291之间,所以我就复制下面那行蓝色的URL到设置的定制器中

在这里插入图片描述

然后就可以下载想要的插件啦

在这里插入图片描述

然后重启一下即可看到有visual GC这个选项了

在这里插入图片描述

四、使用

那我先执行一个不停止的程序

在这里插入图片描述

结果是不停的输出1,这是个死循环,我们再回去看看GC
在这里插入图片描述

第一次观察

在这里插入图片描述

几秒钟后观察
在这里插入图片描述

我把这个程序停止掉之后,最后进行观察,左边的test这个java程序就不见了,右边的GC也就停了下来
在这里插入图片描述

那现在就开始分析一下这几个过程,就看最后关掉之后的那个状态,可以看到GC time是指发生了多少次的GC,图中就是发生了233次GC,就花了276.256ms的时间,而下一行的Eden区,也是发生了223次GC,花费的时间也是276.256ms,很显然,发生的GC都是在Eden区,Old老年代区发生了0次GC,花费0s。

这只是个普通的死循环,工作量并不大,所以占用不了多少内存空间,根本就不会发生多少次GC,也根本不需要老年代区GC

在这里插入图片描述

而右边的进度图,就是说明内存使用的情况,当图中的色块达到顶端的时候,就是内存满的时候,这时候就需要进行一次GC,把内存占用推送到下一个区,满一次清理一次就GC一次

除了可以检测java虚拟机的垃圾回收,还可以监视一下该java程序CPU的占用情况,线程等等。

当我们开发其他程序的时候,可能需要对程序做优化,就要结合这些指标来进行分析,确定优化的方法。比如说CPU使用率一直只有很低,那就说明CPU可以利用的内存比较大,可以适当降低其他的消耗,提升CPU损耗来提升效率等等
在这里插入图片描述

当然,除了我提及的各种性能监控和GC过程的查看,还有其他的功能可以使用,比如性能风险,观察各进程的运行情况等等

在这里插入图片描述
在这里插入图片描述

最后,可能会有小伙伴会问,如果执行的程序不是死循环,而是一个普通的输出呢。如果执行的是那种执行完毕就会停止的,比如我这里把循环条件去掉,使程序只执行一次后停止

在这里插入图片描述
在这里插入图片描述

点击运行之后返回JVisualVM来查看结果,但JVisualVM并没有显示这个java进程,或者是一闪而过。这是因为JVisualVM只能实时监控到执行中的java程序,因为改动过的程序执行了输出之后就结束了,所以JVisualVM根本没办法去监控程序的状态,前面停止之后还能看到,是因为你已经在停止之前打开了这个程序的监控,在点了停止之后,显示的是停止之前最后一刻的状态。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/28756.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

顶奢好文:3W字,穿透Spring事务原理、源码,至少读10遍

说在前面 在40岁老架构师 尼恩的读者社区(50)中,最近有小伙伴拿到了一线互联网企业如阿里、美团、极兔、有赞、希音的面试资格,Spring事务源码的面试题,经常遇到: (1) spring什么情况下进行事务回滚? (2) spring 事务…

Transformer在CV领域有可能替代CNN吗?

目前已经有基于Transformer在三大图像问题上的应用:分类(ViT),检测(DETR)和分割(SETR),并且都取得了不错的效果。那么未来,Transformer有可能替换CNN吗&#…

索尼RSV视频修复方法论视频文件修复时样本文件的三同

索尼RSV类的文件修复案例有很多,程序操作也很简单没什么可说的,这次这个索尼ILCE-7SM3的案例就是为了让大家更好的认识视频修复中我称之为“三同“的重要性,想要恢复的效果好必须要把准备工作做到位。 故障文件:45.1G RSV文件 故障现象: 索…

工具篇--4 消息中间件-RabbitMq 模型介绍

1 介绍: RabbitMQ 是一个开源的消息中间件,它实现了 AMQP(高级消息队列协议)标准,并且支持多种语言和操作系统,包括 Java、Python、Ruby、PHP、.NET、MacOS、Windows、Linux 等等。RabbitMQ 提供了可靠的消息传递机制…

竞赛无人机搭积木式编程(三)---用户自定义航点自动飞行功能(全局定位,指哪打哪)

竞赛无人机搭积木式编程(三)---用户自定义航点自动飞行功能(全局定位,指哪打哪) 无名小哥 2023年6月10日 用户通过对前面两讲中全国大学生电子设计竞赛真题植保无人机(2021)、送货无人机&#…

【UE 从零开始制作坦克】2-控制坦克移动(简单的移动效果)

效果 步骤 1. 新建蓝图类,父类选择“VehicleWheel(载具车轮)” 这里就命名为“TankWheel” 双击打开“TankWheel”,设置形状半径为40 2. 打开 “BP_West_Tank_M1A1Abrams” 选中“网格体(VehicleMesh)&…

JMeter参数化4种实现方式

目录 前言: 1 参数化释义 2 参数化实现 CSV实例 注意事项 前言: 在使用JMeter进行测试时,参数化允许您模拟不同的用户、不同的数据、不同的操作等,从而增加了测试的灵活性和复用性 1 参数化释义 什么是参数化?…

设计模式(十八):行为型之观察者模式

设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…

分布式数据库HBase

大数据基础-分布式数据库HBase 概述HBase简介HBase与传统关系数据库的对比分析 HBase数据模型数据模型概述数据模型相关概念数据坐标 HBase的实现原理HBase功能组件表和RegionRegion的定位HBase框架结构HMasterRegionServerHBase协作组件RegionColumnFamilyKeyValue小结 HBase运…

STM32单片机(六)TIM定时器 -> 第二节:TIM定时中断练习(定时器定时中断和定时器外部时钟)

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

docker数据管理---数据卷,数据卷容器

在Docker中,数据卷(data volumes)和数据卷容器(data volume containers)是用于在容器之间共享和持久化数据的两种不同的机制。 一、数据卷 数据卷是一个特殊的目录或目录,可以绕过容器文件系统的常规层&a…

【RabbitMQ教程】第六章 —— RabbitMQ - 延迟队列

💧 【 R a b b i t M Q 教程】第六章—— R a b b i t M Q − 延迟队列 \color{#FF1493}{【RabbitMQ教程】第六章 —— RabbitMQ - 延迟队列} 【RabbitMQ教程】第六章——RabbitMQ−延迟队列💧 🌷 仰望天空,妳我亦是行人…

2023年前端面试高频考点HTML5+CSS3

目录 浏览器的渲染过程⭐⭐⭐ CSS 、JS 阻塞 DOM 解析和渲染 回流(重排)和重绘⭐⭐ 选择器 ID选择器、类选择器、标签选择器(按优先级高到低排序)⭐⭐ 特殊符号选择器(>,,~,空格&#xff0…

Stopwatch工具类计时器探究

搬砖的我们 特别是Java开发的童鞋们, 经常需要通过记录开始时间和结束时间,然后通过计算差值,得到时间差,如下面的代码: long start System.currentTimeMillis(); long end System.currentTimeMillis(); System.out.println(…

医疗设备都在用哪些晶振?

医疗设备是指用于医疗诊断、治疗、监测等方面的各种设备。随着科技的不断发展,医疗设备的功能不断增强,精度和稳定性也得到了大幅提升。在这些医疗设备中,晶振是非常重要的元件之一。本文将介绍医疗设备中常用的晶振类型及其特点。 一、晶振…

P20[6-8]编码器接口测速(软)

与外部中断编码器逻辑不同,此处编码器使用的是定时器方法 1.Encoder编码器部分: #include "stm32f10x.h" // Device header void Encoder_Init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCm…

阿里云弹性公网EIP收费价格表

阿里云弹性公网EIP怎么收费?EIP地域不同价格不同,EIP计费模式分为包年包月和按量付费,弹性公网IP可以按带宽收费也可以按使用流量收费,阿里云百科分享阿里云弹性公网IP不同地域、不同计费模式、按带宽和按使用流量详细收费价格表&…

Java泛型的使用

1.什么是泛型? 所谓泛型,就是允许在定义类、接口时通过 一个标识 表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如,继承或实现这个接口,用这个类型声明变量、创建对象时&#…

取石子游戏——算法与编程

取石子游戏 目录 问题描述输入输出格式输入格式:输出格式: 输入输出样例输入样例#1:输出样例#1:提示信息 算法尼姆博奕 代码 问题描述 A l i c e Alice Alice和 B o b Bob Bob在玩取石子游戏,摆在他们面前的有 n n n堆…

RFID期末复习总结

一.概念部分 1.基础概念 射频识别无线电频率识别RFID 应答器:存放识别信息的电子数据载体 阅读器:将识别信息从应答器中读出(还可以写入数据) 应答器是统称,在各种专业场合有专业名字,比如射频卡&#…