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(线程转储)

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

在这里插入图片描述

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

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

相关文章

Android ViewModel实现和原理

ViewModel实现和原理 前言1. 使用1.1 gradle准备1.2 模拟场景1.3. LiveData和ViewModel1.4 更新数据 2. 原理与源码解读2.1 添加观察者2.2 setValue2.3 post 参考资料 前言 ViewModel的主要基于观察者的设计模式&#xff0c;他主要分为两个部分&#xff1a; 提供者Provider&a…

RK3588/算能/Nvidia智能盒子:[AI智慧油站」,以安全为基,赋能精准经营

2021年9月&#xff0c;山东省应急管理厅印发了关于《全省危险化学品安全生产信息化建设与应用工作方案&#xff08;2021-2022 年&#xff09;》的通知&#xff0c;要求全省范围内加快推进危险化学品安全生产信息化、智能化建设与应用工作&#xff0c;建设完善全省危险化学品安全…

游戏服务器研究一:bigworld 开源代码的编译与运行

1. 前言 bigworld 已经开源了它的代码&#xff0c;而我对于大世界的 scale 很感兴趣&#xff0c;所以就尝试把代码跑起来研究。但是&#xff0c;整个过程比我原先预想的复杂得多。 虽然能找到一些官方的帮助文档&#xff0c;但这些文档要么过旧&#xff0c;要么过于详尽&…

0元体验苹果macOS系统,最简单的虚拟机部署macOS教程

前言 最近发现小伙伴热衷于在VMware上安装体验macOS系统&#xff0c;所以就有了今天的帖子。 正文开始 首先&#xff0c;鉴于小伙伴们热衷macOS&#xff0c;所以小白搜罗了一圈macOS系统&#xff0c;并开启了分享通道。 本次更新的系统版本是&#xff1a; macOS 10.13.6 ma…

B端业务需求分析的3大注意事项

通过深入分析业务需求&#xff0c;可以准确理解B端用户的具体需求&#xff0c;帮助项目团队设计出真正解决企业问题、提高工作效率的产品或服务。这减少了后期变更&#xff0c;节约了时间和资源。如果没有深入分析业务需求&#xff0c;产品或服务功能可能与实际业务需求脱节&am…

街道网格宣传稿件投稿我知道了好方法

作为街道信息宣传员,我的日常是将街道的每一项重要活动、每一份温暖故事编织成文字,传递给公众。这份工作既充满挑战又极具意义,但在最初,我却在这份看似简单的任务上屡屡受阻。那时,我的投稿方式单一且传统——依赖电子邮件,将稿件发送至各大媒体的投稿箱。我本以为,只要内容足…

【讲解下Pip换源】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

【Redis】java客户端(SpringData和jedis)

https://www.oz6.cn/articles/58 https://www.bilibili.com/video/BV1cr4y1671t/?p16 redis官网客户端介绍&#xff1a;https://redis.io/docs/latest/develop/connect/clients/ jedis maven引入依赖 <dependencies><!--引入Jedis依赖--><dependency><…

Jmeter 性能测试步骤是什么?

性能测试是软件开发过程中非常重要的一环。它可以帮助我们评估软件系统在不同负载下的性能表现&#xff0c;找出系统中的性能瓶颈&#xff0c;并提供改进方案。而JMeter作为一款功能强大且广泛使用的性能测试工具&#xff0c;可以帮助我们实现这一目标。 下面&#xff0c;我将…

算法课程笔记——线段树维护矩阵

算法课程笔记——线段树维护矩阵 2

Elasticsearch:简化数据流的数据生命周期管理

作者&#xff1a;来自 Elastic Andrei Dan 今天&#xff0c;我们将探索 Elasticsearch 针对数据流的新数据管理系统&#xff1a;数据流生命周期&#xff0c;从版本 8.14 开始提供。凭借其简单而强大的执行模型&#xff0c;数据流生命周期可让n 你专注于数据生命周期的业务相关方…

总结一下 C# 如何自定义特性 Attribute 并进行应用

前言 Attribute&#xff08;特性&#xff09;是一种用于为程序元素&#xff08;如类、方法、属性等&#xff09;提供元数据信息的方法。 特性是一种声明式的信息&#xff0c;附加到程序元素上&#xff0c;提供额外的数据用于描述和控制这些元素的行为。 在编译和运行时&…

项目准备和启动

1.什么是项目建议书&#xff1f; 2.项目建议书的内容 3.可行性分析方法 4.项目组织结构&#xff08;职能型 项目型 矩阵型&#xff09; 5.项目管理层决策层执行层之间的关系 6.软件项目的可行性分析包括哪几个方面&#xff1f;影响决策的关键因素又是什么&#xff1f; 软件项目…

Microsoft Visual C++ Redistributable 【安装包】【高速下载】

方法1、可以从官方下载&#xff0c;如下图 方法2 已经下载好并且已经整理好了2008--2022的所有版本点击下方链接即可高速下载 如果是win7-win8-win10-win11直接可以下载2015--2022版本&#xff0c;xp需要下载2015之前的 点击链接Microsoft Visual C Redistributable官方版本…

如何在不同的操作系统中查看路由器的IP地址?这里有详细步骤

如果你曾经需要访问路由器的设置页面来进行一些配置更改,你知道你需要路由器的IP地址才能访问。如果你忘记了这个IP地址是什么,下面是如何在几乎所有平台上找到它的。 为什么路由器的IP很有用 在网络世界中,默认网关是一个IP地址,当流量被发送到当前网络之外的目的地时,…

代理四川公司疑难商标办理商标异议复审办理

申请商标注册或者办理其他商标事宜&#xff0c;可以自行办理&#xff0c;也可以委托依法设立的商标代理机构办理。外国人或者外国企业在中国申请商标注册和办理其他商标事宜的&#xff0c;应当委托依法设立的商标代理机构办理&#xff0c;按照被代理人的委托办理商标注册申请或…

立创开源学习篇(一)

1.机壳地 外面包围的一圈是机壳地&#xff0c;和金属外壳相连与电路板的GND不相连&#xff1a;&#xff08;大疆很多产品有此设计&#xff09; 屏蔽和接地&#xff1a;通过在电路板周围打孔&#xff0c;并连接到机壳地&#xff0c;可以形成有效的电磁屏蔽层&#xff08;形成金…

主机与VMware虚拟机共享文件夹:解决虚拟机找不到共享文件夹问题,挂载文件权限问题

最近在倒腾创龙T113&#xff0c;跟着教程走遇到设置了共享文件夹&#xff0c;但是虚拟机找不到的问题。 原因&#xff1a;权限问题 解决方法&#xff1a; ①在虚拟机关机状态下&#xff0c;进入选项卡设置“共享文件” ②启动虚拟机&#xff0c;打开命令行 到系统根目录&#…

openwrt如何安装python

首先配置opkg源。 # 备份初始conf mv /etc/opkg.conf /etc/opkg.conf.bak # 新建配置 vim /etc/opkg.conf # 添加如下内容&#xff1a; dest root / dest ram /tmp lists_dir ext /var/opkg-lists option overlay_root /overlay # notice dest usb /mnt/sdb1/opkg arch all 100…

一个简单的信号发射电路的构建

在基本的信号发射电路中&#xff0c;线圈&#xff08;电感器&#xff09;和电阻的组合可以产生振荡信号&#xff0c;而天线&#xff08;通常通过线圈&#xff09;用于发射信号。 LC振荡电路&#xff1a; **线圈&#xff08;L1&#xff09;和电容器&#xff08;C&#xff09;**串…