JVM 性能分析案列——使用 JProfiler 工具分析 dump.hprof 堆内存快照文件排查内存溢出问题

在 windows 环境下实现。

参考文档

一、配置 JVM 参数

配置两个 JVM 参数:

  • -XX:+HeapDumpOnOutOfMemoryError,配置这个参数,会在发生内存溢出时 dump 生成内存快照文件(xxx.hprof)
  • -XX:HeapDumpPath=F:\logs,指定生成内存快照文件的路径。

为了测试方便,将堆内存设置小一点

  • -Xms512m,设置堆内存空间下限。
  • -Xmx512m,设置堆内存空间上限。
    在这里插入图片描述

经过上述配置,当发生内存溢出时,会生成对应的快照文件,如下:

在这里插入图片描述

发生内存溢出的代码

    public static void main(String[] args) {List<Byte> bytes = new ArrayList<>();while (true) {Byte[] b = new Byte[1024 * 10];bytes.addAll(Arrays.asList(b));}}

二、JProfiler 工具打开 .hprof 文件分析

1、打开.hprof 文件

在这里插入图片描述

2、Current Object Set(当前对象集)页面

打开后显示界面如下。只有堆遍历器是可用的,其他部分都是灰色不可以用状态。在 Heap Walker(堆遍历器)— Current Object Set(当前对象集)— Classes(类)选项下,展示所有类,默认按照类生成实例的数量排序。

在这里插入图片描述

由于分析内存溢出,这里按照占用内存大小进行排序

在这里插入图片描述

通过内存大小排序后,可以看到占用最大内存的类,其占据了大部分内存 181MB,可以大致定位是这个类的对象实例大量产生导致内存溢出,接着往下查找。选中这个类,点击右键 — Use Selected Instances — 选中(incoming references)— 确定,可以得到这个类的所有对象实例的引用关系,如下图:

在这里插入图片描述

可以看到这个类的所有实例大小,第一个实例对象占据大部分内存,可能是因为这个对象实例导致的内存溢出,展开栈内引用链,查看有哪些地方使用了这个对象,从而定位到有问题的调用地方

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

若引用这个对象的地方太多,上面看着不方便,可以通过调用示图查看。选中这个对象,点击右键 — Show In Graph,进入调用关系图,如下图:

在这里插入图片描述

选中某个模块对象,点击右键,基于红框中的三个选项继续寻找调用或被调用的对象图。

  • Show Incoming References:拓展调用者图谱
  • Show Outgoing References:拓展被调用者图谱
  • Show Paths To GC Root:沿着GC Root路径拓展调用者图谱
    在这里插入图片描述
    同样也可以定位到有问题的代码。
    在这里插入图片描述

3、Thread Dump(线程转储)

线程转储记录了快照时的所有线程,可以查看线程运行状态(运行、等待、阻塞等)和线程调用栈(展现线程执行的方法调用路径)。运行出现错误的线程会用一个特殊的图标标记。

在这里插入图片描述

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

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

相关文章

力控算法每日一练:209. 长度最小的子数组(java)

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 class Solution {public int minSu…

代码随想录算法训练营第三十八天| 509. 斐波那契数 ,70. 爬楼梯,746. 使用最小花费爬楼梯

509. 斐波那契数 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int fib(int n) {if (n < 1) {return n;}int[] dp new int[n 1];dp[0] 0;dp[1] 1;for (int i 2; i < n; i) {dp[i] dp[i - 1] dp[i - 2];}return dp[n];} } 70. 爬楼梯 - 力扣&am…

十二星座女、具有哪些情感特质。

白羊座&#xff08;奋不顾身&#xff09;。金牛座&#xff08;爱财如命&#xff09;。双子座&#xff08;灵活多变&#xff09;。 巨蟹座&#xff08;似水柔情&#xff09;。狮子座&#xff08;光明磊落&#xff09;。处女座&#xff08;尽善尽美&#xff09;。 天秤座&#xf…

安装wsl

安装wsl 先决条件&#xff1a; 打开控制面板->选择程序与功能->选择启动或关闭windows功能&#xff0c;将以下框选的勾选上 二、到Mircosoft store下载Ubuntu 三、如果以上都勾选了还报以下错误 注册表错误 0x8007019e Error code: Wsl/CallMsi/REGDB_E_CLASSNOTREG…

【three.js】旋转、缩放、平移几何体

目录 一、缩放 二、平移 三、旋转 四、居中 附源码 BufferGeometry通过.scale()、.translate()、.rotateX()、.rotateY()等方法可以对几何体本身进行缩放、平移、旋转,这些方法本质上都是改变几何体的顶点数据。 我们先创建一个平面物体,样子是这样的。 一、缩放 // 几何…

重新安装 Windows 10 后如何恢复丢失的数据?

“嗨&#xff0c;我的 Windows 10 崩溃了&#xff0c;所以我不得不重新安装它。我使用 USB 可启动驱动器重新安装了操作系统。但是&#xff0c;重新安装后&#xff0c;C 盘上的所有先前文件都丢失了。有什么方法可以恢复丢失的文件吗&#xff1f;” - Jacky 在大多数情况下&am…

如何在两个不同的conda环境中实现jupyter notebook共同使用,避免重复下载

前提&#xff1a;有2个conda环境&#xff0c;yes和py38_pytorch 其中&#xff0c;yes已经安装了jupyter notebook;py38_pytorch没有jupyter notebook 现在&#xff0c;实现在py38_pytorch用jupyter notebook 步骤&#xff1a; 1、激活py38_pytorch conda activate py38_p…

中小学电子教材下载办法(202406最简单的)

官方版本 现在能阅读电子教材的官方网站挺多的&#xff0c;例如 人民教育出版社-电子教材&#xff0c;还有 国家中小学智慧教育平台 &#xff0c;其他还有很多可在阅读的网站。由于平台的原因不能直接贴链接&#xff0c;大家可以通过搜索关键词找到网站。 如何下载 据我所知…

基于CentOS Stream 9平台安装MySQL8.4.0 LTS

1. 安装之前 1.1 查看系统版本 [rootcoisini /]# cat /etc/redhat-release CentOS Stream release 9 1.2 查看cpu架构 [rootcoisini /]# lscpu 架构&#xff1a; x86_64 CPU 运行模式&#xff1a; 32-bit, 64-bit 2. MySQL官方下载https://dev.mysql.com/downloads/mysql/ 或…

相亲交友APP系统|婚恋交友社交软件|语音聊天平台定制开发

在现代社会&#xff0c;婚恋交友已经成为了人们日常生活中的一项重要任务。为了方便用户进行相亲交友活动&#xff0c;各种相亲交友APP系统和婚恋交友社交软件应运而生。本文将介绍相亲交友APP系统、婚恋交友社交软件的开发以及语音聊天平台的定制开发的相关知识和指导。 一、…

special characters are not allowed

处理域名连接nacos读取配置异常 1 项目启动报错2 问题处理3 刷新依赖重启问题解决 1 项目启动报错 使用ip可以正在启动&#xff0c;但是使用域名报下面的错误 2024-06-15 17:37:22.981 ERROR 29268 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : parse …

餐厅点餐系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;商品管理&#xff0c;用户管理&#xff0c;店家管理&#xff0c;广告管理 店家账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;商品管理&#xff0c;广告管…

牛客小白月赛96 解题报告 | 珂学家

前言 题解 A. 最少胜利题数 签到 n1 len(set(input())) n2 len(set(input()))if n1 < n2:n1, n2 n2, n1print (-1 if n1 6 else n1 - n2 1)B. 最少操作次数 思路: 分类讨论 只有-1,0,1,2这四种结果 特判 01, 10 n int(input()) s input()# 枚举 from collectio…

Windows10 MySQL(8.0.37)安装与配置

一、MySQL8.0.37下载 官网下载链接&#xff1a; https://dev.mysql.com/downloads/ 解压文件&#xff0c;解压到你想要的位置 二、新建MySQL配置文件 右键新建文本文档 新建my.txt文件 编辑my.txt文件&#xff0c;输入以下内容 [mysqld] # 设置 3306 端口 port3306 # 设…

SQLServer使用 PIVOT 和 UNPIVOT行列转换

在SQL Server中&#xff0c;PIVOT是一个用于将行数据转换为列数据的操作。它特别适用于将多个行中的值转换为多个列的情况&#xff0c;并在此过程中执行聚合操作。以下是关于SQL Server中PIVOT操作的详细解释和示例&#xff1a; 1、本文内容 概述语法备注关键点简单 PIVOT 示…

15.RedHat认证-Ansible自动化运维(上)

15.RedHat认证-Ansible自动化运维(上) RHCE8-RH294 Ansible自动化&#xff08;Ansible版本是2.8.2&#xff09; Ansible介绍 1.Ansible是什么&#xff1f; Ansible是一个简单的强大的无代理的自动化运维工具&#xff08;Ansible是自动化运维工具&#xff09;Ansible特点 简…

RPC知识

一、为什么要有RPC&#xff1a; HTTP协议的接口&#xff0c;在接口不多、系统与系统交互较少的情况下&#xff0c;解决信息孤岛初期常使用的一种通信手段&#xff1b;优点就是简单、直接、开发方便&#xff0c;利用现成的HTTP协议进行传输。 但是&#xff0c;如果是一个大型的网…

[大模型]XVERSE-7B-chat FastAPI 部署

XVERSE-7B-Chat为XVERSE-7B模型对齐后的版本。 XVERSE-7B 是由深圳元象科技自主研发的支持多语言的大语言模型&#xff08;Large Language Model&#xff09;&#xff0c;参数规模为 70 亿&#xff0c;主要特点如下&#xff1a; 模型结构&#xff1a;XVERSE-7B 使用主流 Deco…

HAL库开发--STM32的HAL环境搭建

知不足而奋进 望远山而前行 目录 文章目录 前言 下载 安装 解压 安装 添加开发包 修改仓库路径 下载软件开发包&#xff08;慢&#xff0c;不推荐&#xff09; 解压已有软件开发包&#xff08;快&#xff0c;推荐&#xff09; 总结 前言 在嵌入式系统开发中&#x…

线上教育培训办公系统系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;教师管理&#xff0c;学生管理&#xff0c;运营事件管理 教师账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;作业管理&#xff0c;电…