JVM-jvisualvm性能监控可视化工具使用与eden-s0-s1分配分析(三)

news2024/11/17 19:50:16

目录

第一步:安装jvisualvm

 第二步:安装VisualvmGc插件

方式一:jvisualvm工具直接下载安装

方式二:去官网下载导入安装

总结

第三步:idea安装VisualvM Launcher插件

第四步:演示young中eden、s0、s1垃圾回收过程

1、配置jvm堆大小

 2、启动一个项目

3、打开jvisualvm

第五步:jvisualvm性能监控可视化工具使用

1、菜单使用介绍

1.1、概述

1.2、监控

1.3、线程

1.4、抽样器

 第六步:总结


第一步:安装jvisualvm

jvisualvm在安装完jdk的时候就已经存在了,自动安装在jdk安装目录bin下面。windows可以到安装目录下直接执行exe文件。

然后双击执行,就自动打开界面:

 为了分析young区内存分布与回收机制,我们还需要一个插件:VisualvmGc。

 第二步:安装VisualvmGc插件

有两个方式:

方式一:jvisualvm工具直接下载安装

我们打开jvisualvm工具,然后我们可以找到工具菜单,选择插件,弹出配置框。

然后点击“可用插件”菜单,找到我们需要插件,勾选上之后,继续安装。

 等待安装完成就可以,然后我们工具里面就可以看到了。

方式二:去官网下载导入安装

官网:VisualVM: Plugins Centers

选择一个版本,然后去找到VisualvmGc插件;如图:

这里我们可以看他有很多插件供我们使用。比如常用的:Jconsole

下载之后保存在本地,供后面安装到 jvisualvm使用。

我们打开jvisualvm工具,然后我们可以找到工具菜单,选择插件,弹出配置框

再选择已下载菜单

 就可以导入我们上面官网下载的插件进行安装。 下面与上面一步是一样的操作。

总结

这里我们发现jdk自带很多插件供我们使用,我们可以根据自己需要安装对应的组件;非常方便。

至此:我们工具安装好了,但是为了演示内存分布,我们需要在idea配置安装一下对应插件。

第三步:idea安装VisualvM Launcher插件

1、首先打开idea,找出插件安装菜单Plugins,然后搜索插件VisualvM Launcher,进行安装。

安装好之后,我们可以看到idea已安装的组件菜单,然后点击我们安装好的插件,进行配置

 配置我们的JVisualVM.exe文件路径,和jdk安装的路径

 安装好之后,到此基础环境配置就结束了。

然后我们可以看见我们idea多出两个启动按钮:

后面我们测试就可以用它的。

第四步:演示young中eden、s0、s1垃圾回收过程

1、配置jvm堆大小

这个方便我们在本地环境模拟测试。

我们在idea中设置JVM堆内存大小为300m,eden区和s0、s1为8:1:1(默认老年代和新生代为2:1)
-Xms300m -Xmx300m -XX:SurvivorRatio=8 

 2、启动一个项目

随便一个demo项目都可以,可以自己写一个循环方法,线程睡眠等等都可以。

3、打开jvisualvm

然后点击VisualvmGc

 

 然后我们可以看到这几个分区:

我们可以看到s0,s1和eden区此时他们的内存变化,以及内存存储分布。

 刚开始进来我们看到eden区的内存在不断的增加,s0内存可能没有,可能有(项目刚启动是没有的,看项目加载的资源是否会存在s0)。s1的内存一定是没有的 。

但等一段时间,eden区满了之后,就会里面清理一次,然后s0清空,s1增加了内存

 再当eden区满了之后,又开始一轮交替,eden区清空,s1清空,剩余放在s0区。你会发现在没有其他操作清空下,他一直以此类推进行。

 

 当我们收到操作垃圾回收之后,我们发现:

全部被回收,然后先使用eden区,等eden区满了之后s0才会存放垃圾。

第五步:jvisualvm性能监控可视化工具使用

1、菜单使用介绍

1.1、概述

我们可以看到我们配置堆内存大小

 1.2、监控

这里我们可以右上角有几个可选菜单,用来查看面板的,以及可以进行收到垃圾回收,以及堆dump查看与下载

 比如我们点击堆dump可以看到堆内存的详细情况

 以及右击可以下载分析堆dump文件:

同时还支持与另一个堆文件比较

可以通过类分析发现这两个堆中那个类占的内存越来越多,没有被释放,就可能哪个造成的oom。 

 1.3、线程

我们在打开线程菜单,可以看到所有运行的线程以及线程的dump文件

 同样,我们可以下载线程的dump文件。

我们点击右上角的“线程Dump”按钮,可以看到如下线程的详细信息。

 下载堆内存之后从而可以检查死锁线程。

1.4、抽样器

我们可以打开到抽样的按钮器,里面有

cpu的抽样和内存抽样。

1、cpu抽样,我们点击之后,就可以实时运行,里面可以看到cpu样例和线程cpu时间实时分析。

 2、内存抽样同样也是,点击之后进行分析。同样有两个部分:

 第六步:总结

至此我们的 JVisualVM基本使用以及young分区模拟就结束完了,这里只是介绍本地工程,我们远程服务器一样是可以,只要链接远程服务器,就可以进行监控。

这里配置链接我们远程服务器就可以了。

后续我们将具体使用这个工具以及其他插件进行项目实战中各种场景分析。

JVM-java对象内存分布(二)_平凡之路无尽路的博客-CSDN博客

JVM GC ROOT分析与垃圾收集器原理分析(四)_平凡之路无尽路的博客-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈小程序开发 [2018年]

一、问题背景 随着App市场趋近于饱和,大部分用户已经养成了使用习惯,加上开发和推广新的App的成本高,使得开发新的App很难在市场上生存。在此背景下,小程序应运而生,2016年,张小龙的微信团队首次推出了微信…

vmware虚拟机无法启动修复

虚拟机场景报错:Entering emergency mode. Exit the shell to continue. #输入journalctl journalctl #如果出现以下描述: failed to mount /sysroot. Dependency failed for Initrd root File System. Dependency failed for Reload configuration fro…

信息服务上线渗透检测网络安全检查报告和解决方案4(网站风险等级评定标准、漏洞危害分级标准、漏洞安全建议)

系列文章目录 信息服务上线渗透检测网络安全检查报告和解决方案3(系统漏洞扫描、相对路径覆盖RPO漏洞、nginx漏洞修复)信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)信息服务上线渗透检测网…

CCF-CSP真题《202303-2 垦田计划》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号:202303-2试题名称:垦田计划时间限制:1.0s内存限制:512.0MB问题描述: 问题描述 顿顿总共选中了 n 块区域准备开垦田地&#xf…

交换机是否会梦见机器学习?面向网络内分类

交换机是否会梦见机器学习?面向网络内分类 摘要 机器学习目前正在推动技术和社会革命。虽然可编程交换机已被证明对网络内计算非常有用,但是在可编程交换机内进行机器学习迄今为止取得了很少的成功。不利用网络设备进行机器学习会付出高昂的代价&#…

华为OD机试真题 JavaScript 实现【寻找峰值】【牛客练习题】

一、题目描述 给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。 1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于; 2.假设 nums[-1] n…

【容器起不来~tomcat】

记录一次线上容器~tomcat起不来的场景: **部门由于资金有限,只能用tomcat去部署,话不多说直接贴图: Docker 镜像 Tomcat 启动失败– 查看线上日志,日志报错了,报错内容如下: 1,Error response from daemon: driver failed programming external connectivityon endpoint jen…

Safari开发者工具

Safari开发者工具 1 开发者功能2 开发者功能可以干什么2.1 捕获模拟器的请求 1 开发者功能 Safari->首选项->高级->开启“在菜单栏中显示‘开发’菜单” 2 开发者功能可以干什么 2.1 捕获模拟器的请求 当我们向查看模拟器上一个完整的网络请求时,往往…

libevent实践06:监听TCP服务器

简介 函数evconnlistener_new_bind struct evconnlistener * evconnlistener_new_bind(struct event_base *base, evconnlistener_cb cb,void *ptr, unsigned flags, int backlog, const struct sockaddr *sa,int socklen) 参数解析: base:事件集合 ev…

Python 字符串的使用

字符串使用 1. 字符串的定义方式 双引号或者单引号括起来的数据,就是字符串。使用三引号括起来也是字符串,并支持换行。 例: # 使用反斜线 对单引号进行转义 name1 i\ Tom name2 "Rose" name3 Tom name4 ""&qu…

8-什么是数组重塑?【视频版】

目录 问题视频解答 问题 视频解答 点击观看: 8-什么是数组重塑?

[mmcv系列] pip安装mmcv记录

文章目录 1.查看torch和cuda版本1.安装1.1从预编译包安装1.2 源码编译安装 2.校验报错:from mmcv import Config 可以直接 参考教程: 找到pip安装,选择自己的cuda和torch版本,复制指令到终端安装即可: 1.查看torch和c…

归并排序的具体实现过程

作者主页:paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《算法详解》专栏,本专栏是针对于大学生,编程小白精心…

TCP三握四挥

TCP三握四挥 TCP最关键的三个步骤:建立连接、数据传输、释放连接,这里的三次握手实现的是服务端和客户端建立连接;四次挥手实现的是服务端和客户端释放连接。 三次握手: 建立数据连接 TCP连接需要三次握手的原因: 三次…

静力触探数据智能预处理(1)

静力触探数据智能预处理(1) 前言 数据处理方式已由手工1.0、计算机辅助2.0到人工智能3.0的趋势发展。现场采集的静力触探数据存在大量的异常数据,需要后期处理;但是目前还未见一个静力触探数据预处理的软件,数据预处…

BN、LN、IN、GN的自我理解

目录 一、Batch Normal 二、Layer Normal 三、Instance Normal 四、Group Normal 五、参考 参考了这两三篇博客,终于理解了这几个概念。 一、Batch Normal Batch Normal,举例来说:输入一个batch size,这个batch size中有2个…

2. Linux组件之数据库连接池

目录 一、数据库连接池1.1 池化技术1.2 数据库连接池及其作用1.3 不使用数据库连接池1.4 使用数据库连接池1.5 长连接和连接池1.6 数据库连接池运行机制1.7 连接池和线程池的关系 二、数据库连接池的设计2.1 mysql 连接池1. 构造函数2. 初始化3. 请求获取连接4. 归还连接5. 析构…

Linux训练营(文件和目录操作)

文章目录 前言一、ls命令二、cd命令三、mkdir命令四、cp命令五、rm命令总结 前言 本篇文章我们来讲解Linux中的文件和目录操作,在这里我们主要使用的是Linux中的命令来操作这些文件和目录,命令是Linux中最基础的部分。 一、ls命令 ls是一个常用的命令…

5-NumPy如何创建N维数组?【视频版】

目录 问题视频解答 问题 视频解答 点击观看: 5-如何创建等N维数组?

C++ 命名空间

假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。 同样的情况也出现在 C 应用程序中。…