iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >分析和解决java.lang.OutOfMemoryError: Java heap space问题
  • 726
分享到

分析和解决java.lang.OutOfMemoryError: Java heap space问题

javajvm开发语言优化内存 2023-10-24 07:10:45 726人浏览 八月长安
摘要

这里写目录标题 问题场景问题分析与解决1.优化项目代码2.提升Java heap size3.JVM参数配置配置参考堆区参数配置说明非堆区参数配置说明 问题场景 最近客户反馈在生

这里写目录标题

问题场景

最近客户反馈在生产环境导入操作时遇到任务一直执行中,并且入库的数据量一直不改变。通过日志查询,终于定位到报错信息如下:

java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Unknown Source) ~[na:1.8.0_221]at java.io.ByteArrayOutputStream.grow(Unknown Source) ~[na:1.8.0_221]at java.io.ByteArrayOutputStream.ensureCapacity(Unknown Source) ~[na:1.8.0_221]at java.io.ByteArrayOutputStream.write(Unknown Source) ~[na:1.8.0_221]at com.cxstar.common.utils.DESUtil.decryptFile(DESUtil.java:193) ~[cxstar-common-1.0.0.jar!/:1.0.0]at com.cxstar.business.service.impl.ArcHiveServiceImpl.upload(ArchiveServiceImpl.java:103) ~[cxstar-business-1.0.0.jar!/:1.0.0]at com.cxstar.business.factory.AsyncFactory.importAttachment(AsyncFactory.java:1016) ~[cxstar-business-1.0.0.jar!/:1.0.0]at com.cxstar.business.factory.AsyncFactory.access$800(AsyncFactory.java:62) ~[cxstar-business-1.0.0.jar!/:1.0.0]at com.cxstar.business.factory.AsyncFactory$7.run(AsyncFactory.java:708) ~[cxstar-business-1.0.0.jar!/:1.0.0]at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[na:1.8.0_221]at java.util.concurrent.FutureTask.run(Unknown Source) ~[na:1.8.0_221]at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source) ~[na:1.8.0_221]at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) ~[na:1.8.0_221]at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_221]at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_221]at java.lang.Thread.run(Unknown Source) [na:1.8.0_221]

问题分析与解决

java.lang.OutOfMemoryError: Java heap space (JVM 堆空间溢出)简单来说就是在创建新的对象时, 堆内存中的空间不足以存放新创建的对象,导致此种问题的发生。

1.优化项目代码

根据报错信息定位到内存消耗较大的代码,然后对其进行重构或者优化算法。如果是在生产环境,务必要在内存消耗过大的代码出增加日志信息输出,否则容易像我定位一晚上才找到问题所在
在这里插入图片描述

2.提升Java heap size

增加堆内存空间设置,此种方式容易操作。可以较快解决当前问题,但是总体来说还是需要找到项目代码中的问题才是最优解,毕竟内存总是有限的

客户生产环境的服务器是8g内存,并且操作系统是比较老的windows server 2008服务器。在部署项目时使用winsw工具将jar包安装为服务。因此在项目启动时,增加内存参数,修改后配置如下:

<service>    <id>app-idid>    <name>app-name servicename>    <description>application descriptionsdescription>    <executable>javaexecutable>    <arguments>-jar -server -Xms4096m -Xmx4096m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m  "D:\application\api-rest-1.0.0.jar"arguments>    <startmode>Automaticstartmode>    <logpath>%BASE%\logslogpath>    <logmode>rotatelogmode>service>

3.JVM参数配置

配置参考

服务器内存8G ,所以可以采取以下配置:
set JAVA_OPTS=-server -Xms4096m -Xmx4096m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m

服务器内存4G ,所以可以采取以下配置:
set JAVA_OPTS=-server -Xms2048m -Xmx2048m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m

服务器内存2G ,所以可以采取以下配置:
set JAVA_OPTS=-server -Xms1024m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m

服务器内存1G ,所以可以采取以下配置:
set JAVA_OPTS=-server -Xms512m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M -XX:MaxPermSize=256m

服务器内存512M ,所以可以采取以下配置:
set JAVA_OPTS=-server -Xms256m -Xmx256m -XX:PermSize=256M -XX:MaxNewSize=128m -XX:MaxPermSize=128m

堆区参数配置说明

堆区:通过new的方式创建的对象(一个类的实例)、数组所占的空间。所有的线程共享该区域
堆区还细分为新生代(Eden空间、From Survivor空间、To Survivor空间)、老年代(Tenured Generation空间)

参数名含义
-Xmsjava虚拟机初始化时的最小内存
-Xmxjava虚拟机可使用的最大内存

通常会将-Xms 与-Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源

参数名含义
-XX:newSize表示对象创建初始内存的大小,应小于-Xms的值
-XX:MaxnewSize表示对象创建可被分配的内存的最大上限,应小于-Xmx的值
-Xmnjdk1.4后对-XX:newSize、-XX:MaxnewSize两个参数同时进行配置

非堆区参数配置说明

非堆区:代码、常量、外部访问(比如流在传输数据时所占用的资源)等,java垃圾回收机制只作用于堆区,非堆区不会被java垃圾回收机制进行处理

参数名含义
-XX:PermSize表示非堆区初始内存分配大小(方法区)
-XX:MaxPermSize表示对非堆区分配的内存的最大上限(方法区)

在配置之前一定要慎重的考虑一下自身软件所需要的非堆区内存大小,因为此处内存是不会被java垃圾回收机制进行处理的地方。并且更加要注意的是最大堆内存与最大非堆内存的和绝对不能够超出操作系统的可用内存。

来源地址:https://blog.csdn.net/qq_29864051/article/details/130962792

--结束END--

本文标题: 分析和解决java.lang.OutOfMemoryError: Java heap space问题

本文链接: https://www.lsjlt.com/news/441176.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 分析和解决java.lang.OutOfMemoryError: Java heap space问题
    这里写目录标题 问题场景问题分析与解决1.优化项目代码2.提升Java heap size3.JVM参数配置配置参考堆区参数配置说明非堆区参数配置说明 问题场景 最近客户反馈在生...
    99+
    2023-10-24
    java jvm 开发语言 优化 内存
  • 解决idea出现的java.lang.OutOfMemoryError: Java heap space的问题
    文章目录 1. 复现问题 2. 分析问题 3. 解决问题 4. 补充解决java.lang.OutOfMemoryError: PermGen space问题 1. 复现问题 ...
    99+
    2023-09-06
    java intellij-idea 开发语言 tomcat java-ee
  • eclipse java.lang.OutOfMemoryError: Java heap space的解决方案是怎么样的
    这期内容当中小编将会给大家带来有关eclipse java.lang.OutOfMemoryError: Java heap space的解决方案是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。e...
    99+
    2023-06-03
  • java.lang.OutOfMemoryError: GC overhead limit exceeded问题分析及解决
    一、错误重现 2022-12-29 10:12:07.210 ERROR 73511 --- [nio-8001-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.serv...
    99+
    2023-09-07
    JVM调优 JVM堆空间开辟依据 线上OOM问题分析与排查 线上OOM解决思路
  • java heap space错误的解决方法是什么
    Java heap space错误是由于堆内存不足导致的。堆内存是Java虚拟机用来存储对象实例和数组的地方,当堆内存不足时,就会抛...
    99+
    2023-08-22
    Java
  • Java出现Error: Java heap space错误的解决方法
    本篇内容主要讲解“Java出现Error: Java heap space错误的解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java出现Error: Java heap space错误...
    99+
    2023-06-03
  • 如何解决java.lang.OutOfMemoryError: Metaspace异常问题
    小编给大家分享一下如何解决java.lang.OutOfMemoryError: Metaspace异常问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!介绍 M...
    99+
    2023-06-14
  • 分析和解决golang template失败问题
    Go语言自带的模板引擎template,是一款灵活、高效、易用的模板引擎,它可以快速、简单地生成HTML、XML等格式的文本。但是,有时候我们在使用template过程中,会遇到一些困难和问题,比如template的失败。那么,该如何解决t...
    99+
    2023-05-14
  • Java深入分析与解决Top-K问题
    目录题目解题方案方法一方法二方法三题目 求最小的K个数 设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。 解题方案 方法一 排序(冒泡/选择) 思路 1,冒泡排序...
    99+
    2024-04-02
  • 解决JDBCConnectionReset的问题分析
    目录JDBC Connection Reset的问题分析现象分析问题定位TNS错误新线索随机数生成器总结JDBC Connection Reset的问题分析 半年前开始,项目组测试M...
    99+
    2023-05-18
    JDBC Connection Reset 解决JDBC Connection Reset JDBC Connection Reset问题
  • 分析和解决Gitlab不能审批问题
    近日有用户反映,在使用Gitlab过程中遇到了一个问题——不能进行审批。这样的问题对于团队合作来说是相当严重的,因此需及时解决。本文将对此进行分析和解决方案的探讨。首先,我们需要理解Gitlab中的审批机制。在Gitlab中,有一个功能叫做...
    99+
    2023-10-22
  • 分析和解决golang文件乱码问题
    作为一门新兴的编程语言,Golang在近几年的快速发展中不断吸引着越来越多的程序员。然而,在使用Golang编写文件时,可能会遇到文件乱码的问题,这给程序员的开发带来了很多麻烦。本文将从以下方面对Golang文件乱码问题进行深入探讨。一、G...
    99+
    2023-05-14
  • ActiveMQ问题分析和解决是怎样的
    ActiveMQ问题分析和解决是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1)KahaDb和AMQ Message Store两种持久方式如何选择?官方:From...
    99+
    2023-06-04
  • Java跨域问题分析与解决方法详解
    目录一、前言二、什么是跨域问题三、 为什么会出现跨域问题四、什么情况下会出现跨域五、如何解决跨域问题5.1 使用@CrossOrigin注解5.2 使用WebMvcConfigure...
    99+
    2023-05-20
    Java跨域问题原理 Java跨域问题解决方法 Java跨域问题
  • JAVA中文比较问题的分析和解决是怎样的
    这篇文章将为大家详细讲解有关JAVA中文比较问题的分析和解决是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 Java的中文问题由来已久,前不久需要做内存中的中文比较排序,对字符串进行...
    99+
    2023-06-03
  • 分析和解决golang中interface转换的问题
    随着人们对于Golang语言的应用越来越深入,对于其中的一些特性和技术也有了更深入的认识。其中,golang中的interface是一项非常重要且强大的特性,具有很大的灵活性和可扩展性。在实际应用中,我们不可避免地需要使用interface...
    99+
    2023-05-14
  • 分析和解决forum.php打开时乱码问题
    在使用论坛系统时,我们有时会遇到一些问题,其中之一就是打开forum.php页面时出现乱码的情况。这种问题通常是由于网站编码格式不正确或者服务器端配置问题导致的。本文将从这两个方面为大家解决这个问题。一、网站编码格式不正确网站编码格式通常分...
    99+
    2023-05-14
  • 分析和解决Javascript代码不运行问题
    近年来,Javascript已经成为了前端开发中不可或缺的一部分。然而,有时我们会遇到Javascript代码不运行的情况,这让很多开发者十分困惑。本文将从以下几个方面分析和解决Javascript代码不能运行的问题,帮助大家快速找到解决方...
    99+
    2023-05-14
  • 分析和解决IIS无法加载CSS的问题
    IIS 是一种常用的 Web 服务器软件,它能够处理和响应客户端的请求,并向客户端发送网页文件和其他静态资源。在 Web 开发中,CSS(层叠样式表)是一个非常重要的组成部分,它用于定义网页的样式、布局和外观。然而,有时候使用 IIS 时,...
    99+
    2023-05-14
  • Windows下光驱常见问题的分析和解决
    现在,光驱在我们使用电脑中扮演了非常重要的角色,看电影,听音乐,玩游戏。光驱早已经成为电脑的必备设备,作为机器就免不了的有这样或者那样的故障了,有时会遇到机子装好后光驱的盘符却没有了,装系统,换数据线,查CMOS设置,最...
    99+
    2023-05-24
    光驱常见问题 分析和解决 光驱 问题 分析
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作