JVM——堆内存调优(Jprofiler使用)Jprofile下载和安装很容易,故没有记录,如有需要,在评论区留言)

news2025/1/11 18:01:50

堆内存调优

当遇到OOM时,可以进行调参

1、尝试扩大堆内存看结果

2、分析内存,看哪个地方出现了问题(专业工具)

调整初始分配内存为1024M,调整最大分配内存为1024M,打印GC细节(如何添加JVM操作往下看)

-Xms1024m -Xmx1024m -XX:+PrintFGCDetails

在一个项目中,突然出现了OOM故障,那么该如何排除,研究为什么出错

  • 能够看到代码第几行出错:内存快照分析工具,MAT,Jprofiler
  • Dubug,一行行分析代码

MAT,Jprofiler作用:

  • 分析Dump内存文件,快速定位内存泄露;
  • 获得堆中的数据
  • 获得大的对象

下面是一个使用Jprofile查OOM来源的示例

(已经下载好了Jprofile以及Idea插件)

首先写一个必定会OOM的代码:

import java.util.ArrayList;


public class Demo {

    byte[] array = new byte[1*1024*1024];//1m

    public static void main(String[] args) {

        ArrayList<Demo> list = new ArrayList<>();
        int count = 0;

        try{
            while(true){
                list.add(new Demo());
                count = count + 1;
            }
        }catch (Exception e){

        }

    }
}

该问题会虽然用try-catch尝试捕获异常,但问题是,OOM是Error,而非Exception,因此无法排查错误。

首先:

在这里插入图片描述

我们需要添加一些JVM的操作,以至于我们可以在程序运行后在终端查询到JVM的反馈

1、添加JVM操作

在这里插入图片描述

2、添加JVM操作栏(该IDE版本为2023版,因此许多UI做出了修改,与狂神说的UI不同)

在这里插入图片描述

3、在VM option内写下: -Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError意思为:限制初始化堆内存大小为1M,最大堆内存为8M,Dump出OOM

在这里插入图片描述

接下来运行程序,终端会给出JVM信息,下列信息中,第一行表示出现OOM,位置在HeapSpace,即堆空间。第二行表示已经将堆dump出一个.hprof文件,名字为java_pid44260,你可以在文件夹中找到它,也可以直接在project中找到它

在这里插入图片描述

可以发现,除了java_pin44260.hprof文件外,还dump出了一个文件夹,这个文件夹中包含了大量信息,十分占用空间,如果排查完错误,记得删除。

在这里插入图片描述

点开java_pin44260.hprof,如果安装好Jprofile,则会直接跳转到Jprofile,这里可以看到各类占用的空间大小

在这里插入图片描述

跳到Biggest Objects,可以看到,大部分的内存都是由ArrayList构成的,且可以看到它的类型为byte[],现在我们里真相很近了!

在这里插入图片描述

点击Thread Dump,查看线程Dump,因为示例中并没有开多线程,因此问题大概率是出现在main线程中,天使线程大概率是不会出现问题的,所以直接查main,我们可以发现,main线程中发现了OOM,且给出了具体位置具体行数,

在这里插入图片描述

点进去,即可直接跳转到相应位置,我们发现,它直接跳到Demo.java中,光标停留在main方法上,说明问题在此,并且Jprofile给出了具体行数,17行,因此我们就可以锁定问题所在了,就在这!

import java.util.ArrayList;


// Dump文件
public class Demo {

    // -Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError
    byte[] array = new byte[1*1024*1024];//1m

    public static void main(String[] args) {

        ArrayList<Demo> list = new ArrayList<>();
        int count = 0;

        try{
            while(true){
//------------------------------------------------------------------
                list.add(new Demo());//问题所在!!!!!!!!!!!
//------------------------------------------------------------------
                count = count + 1;
            }
        }catch (Exception e){

        }

    }
}

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

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

相关文章

「快学Docker」Docker镜像和容器的创建与管理

「快学Docker」Docker镜像和容器的创建与管理 引言什么是Docker镜像&#xff1f;镜像获取和使用镜像获取镜像使用 什么是Docker容器&#xff1f;Docker容器与主机之间的交互基于Dockerfile创建镜像基于镜像创建容器总结 引言 Docker镜像和容器是当今云计算领域中最受欢迎的技术…

【Buildroot】记一次编译出错gzip: popt-1.16.tar.gz: not in gzip format--更改br里面的默认下载地址

文章目录 我在一次正常的编译过程中遇到了&#xff0c;如下的错误&#xff1a; rootubuntu:/home/liefyuan/Linux/rk356x_linux/buildroot# make -j16 make: Circular /home/liefyuan/Linux/rk356x_linux/buildroot/output/build/iproute2-4.14.1/.stamp_configured <- bus…

Trie树/字典树的原理及实现[C/C++]

文章目录 前言引例&#xff1a;Google经典面试题字典树的原理与实现定义字典树的结构字典树的操作字符串插入字符串查询 字典树的实现字符集数组法节点类结构设计节点的接口字符映射节点类的代码实现 字典树类结构设计字典树接口实现 字符集映射法&#xff08;适用性广&#xf…

idea使用Alibaba Cloud Toolkit实现自动部署

在日常开发过程中&#xff0c;经常会使用到jenkins进行项目部署&#xff0c;但对一些小项目来说&#xff0c;这就过于复杂&#xff0c;就可以使用Alibaba Cloud Toolkit插件配合shell脚本进行项目的远程部署工作。 一、下载Alibaba Cloud Toolkit插件 二、服务器安装nohup 1.…

数据分享 I 地级市人口和土地使用面积基本情况

数据地址&#xff1a; 地级市人口和土地使用面积基本情况https://www.xcitybox.com/datamarketview/#/Productpage?id394 基本信息. 数据名称: 地级市人口和土地使用面积基本情况 数据格式: ShpExcel 数据时间: 2021年 数据几何类型: 面 数据坐标系: WGS84坐标系 数据…

手把手实现简易版vue(二)组件类解析

1、构造器 constructor(propsArgus {}) {const {data () > {},methods {},watch {},computed {}, // 待实现props {}, // 待实现created () > {}, // created钩子函数mounted () > {}, // mounted钩子函数destroyed () > {} // destroyed钩子函数} props…

MySQL云数据库5.5导入到自建MySQL数据库5.7

有一个MySQL云数据库&#xff0c;版本比较老&#xff0c;是5.5. 需要在线下搭建一个测试环境&#xff0c;所以需要将数据还原到一个自建MySQL数据库内。 5.5已经很难找到了&#xff0c;所以安装了一个5.7. 云数据库设置的备份&#xff0c;使用的是全复制文件方法。 还原数据…

电源效率测试标准你知道多少?纳米软件带您了解

电源效率是衡量电源能源利用率和电源质量的重要指标&#xff0c;是电源模块测试的一个重要测试项目。对于电源效率各个国家都有自己的标准&#xff0c;以此来判断能量转换效率&#xff0c;促进提升能源利用率。 什么是电源效率标准? 电源效率标准是衡量电源能量转换率的指标&a…

Spark-Core

Spark简介 Spark-Core核心算子 Spark-Core 文章目录 一、RDD 编程1、RDD序列化1.2 Kryo序列化框架 2、RDD依赖关系2.1 查看血缘关系2.2 查看依赖关系2.3 窄依赖2.4 宽依赖2.5 Stage任务划分 3、RDD 持久化3.1 Cache缓存3.2 CheckPoint检查点3.3 缓存和检查点区别3.4 检查点存储…

天锐绿盾加密软件——企业数据透明加密、防泄露系统

天锐绿盾是一种企业级数据透明加密、防泄密系统&#xff0c;旨在保护企业的核心数据&#xff0c;防止数据泄露和恶意攻击。它采用内核级透明加密技术&#xff0c;可以在不影响员工正常工作的前提下&#xff0c;对需要保护的数据进行加密操作。 PC访问地址&#xff1a; https:/…

基于springboot基于会员制医疗预约服务管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot基于会员制医疗预约服务管理系统演示 摘要 会员制医疗预约服务管理信息系统是针对会员制医疗预约服务管理方面必不可少的一个部分。在会员制医疗预约服务管理的整个过程中&#xff0c;会员制医疗预约服务管理系统担负着最重要的角色。为满足如今日益复杂的管理需…

公司新品上市,如何做好新品发布会宣传

公司新品上市不仅展现了公司的生命力与活力&#xff0c;还代表了公司与时俱进的创新力&#xff0c;积极听取用户反馈的服务精神&#xff0c;而公司新品上市时都会举办新品发布会&#xff0c;今天媒介盒子就来和大家分享&#xff0c;公司如何做好新品发布会的宣传。 一、 撰写活…

2023年中国潜水电机行业现状及前景分析[图]

潜水电机是一种特殊设计的电动机&#xff0c;通常用于水下应用。它们被设计成能够在液体环境中工作&#xff0c;通常是在水中或其他液体中&#xff0c;而且能够在潜水的情况下继续正常运行。潜水电机通常具有防水性能和耐腐蚀性&#xff0c;以适应恶劣的水下环境。 潜水电机行…

Java实现连接SQL Server解决方案及代码

下面展示了连接SQL Server数据库的整个流程&#xff1a; 加载数据库驱动建立数据库连接执行SQL语句处理结果关闭连接 在连接之前&#xff0c;前提是确保数据库成功的下载&#xff0c;创建&#xff0c;配置好账号密码。 运行成功的代码&#xff1a; import java.sql.*;publi…

点集合的三角剖分

点集合的三角剖分是指如何将一些离散的点集合组合成不均匀的三角形网格&#xff0c;使得每个点成为三角网中三角面的顶点。这个算法的用处很多&#xff0c;一个典型的意义在于可以通过一堆离散点构建的TIN实现对整个构网区域的线性控制&#xff0c;比如用带高程的离散点构建的T…

Windows网络监视工具

对于任何规模的企业来说&#xff0c;网络管理在信息技术中都起着至关重要的作用。管理、监控和密切关注网络基础设施对任何组织都至关重要。在Windows网络中&#xff0c;桌面&#xff0c;服务器&#xff0c;虚拟服务器和虚拟机&#xff08;如Hyper-V&#xff09;在Windows操作系…

医院电力系统智能能效监控平台的应用

0引言 随着社会和科学技术的发展&#xff0c;配电系统的智能化已经成为一种发展趋势。医院建设电力智能监控平台&#xff0c;可对供电系统进行集中管理和调度、实时控制和数据采集&#xff0c;监控供电系统设备的运行情况&#xff0c;及时掌握和处理供电系统的各种事故、报警事…

Day07 Stream流递归Map集合Collections可变参数

Stream 也叫Stream流&#xff0c;是Jdk8开始新增的一套API (java.util.stream.*)&#xff0c;可以用于操作集合或者数组的数据。 Stream流大量的结合了Lambda的语法风格来编程&#xff0c;提供了一种更加强大&#xff0c;更加简单的方式操作 public class Demo1 {public stati…

【机器学习合集】标准化与池化合集 ->(个人学习记录笔记)

文章目录 标准化与池化1. 标准化/归一化1.1 归一化归一化的作用 1.2 标准化批标准化方法 Batch Normailzation标准化方法的对比自动学习标准化方法 2. 池化2.1 池化的作用2.2 常见的池化方法2.3 池化方法的差异2.4 池化的必要性 标准化与池化 1. 标准化/归一化 1.1 归一化 归…