java.lang.OutOfMemoryError: Java heap space

news2024/11/20 1:37:03

我经常看见我们服务的控制台上打印出这样的报错:

Java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: GC overhead limit exceeded

1. java.lang.OutOfMemoryError: Java heap space

     Java heap space,Java应用程序创建的对象存放在这片区域,垃圾回收(Garbage Collection)也发生在这块区域。通常一些比较“重型”的操作可能会导致该异常,比如:需要创建大量的对象,层次比较深的递归操作等。
     解决方案有两种,一是优化应用,找到消耗大量内存的地方,然后优化代码或者算法。这种方式比较推荐,但是难度比较大,尤其是在产品环境中出现这种问题,开发人员不能很好的重现问题。第二种方案是提升Java heap size,这种方式虽然感觉有点治标不治本,但是可行性非常高,操作简单。
     对于一般的应用,采用如下方式即可(数字根据自己的需要调整),解决办法:

 “JVM 堆空间溢出(java.lang.OutOfMemoryError: Java heap space)”错误是JVM 堆空间不足,此时只需要调整-Xms 和-Xmx 这两个参数即可。

linux中在{tomcat_dir}/bin/catalina.sh :在 cygwin=false 的前面,如下:

# OS specific support.  $var _must_ be set to either true or false.
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m"
cygwin=false

因为我用的服务器是 4G内存,所以参数使用这个。红色是添加上的。

可以参考下面,注意引号啥的:

服务器内存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

Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 JAVA_OPTS 参数。

JAVA_OPTS参数说明

-server 启用jdk 的 server 版;

-Xms java虚拟机初始化时的最小内存;

-Xmx java虚拟机可使用的最大内存;

-XX:PermSize 内存永久保留区域

-XX:MaxPermSize 内存最大永久保留区域

配置完成后可重启Tomcat ,通过以下命令进行查看配置是否生效:

linux里执行top,对参数的介绍。有时候 VIRT有时候超过了服务器的内存,这很正常,跟linux的内存设计有关系。

序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h

2. java.lang.OutOfMemoryError: PermGen space

  ”永久存储区溢出 PermGen space的全称是Permanent Generation space“  或“(java.lang.OutOfMemoryError:Java Permanent Space)”,都是指内存的永久保存区域,乃是永久存储区设置太小,不能满足系统需要的大小,此时只需要调整-XX:PermSize 和-XX:MaxPermSize 这两个参数即可。

    “PermGen space”这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

3. java.lang.OutOfMemoryError: GC overhead limit exceeded

     这个错误会出现在这个场景中:GC占用了多余98%(默认值)的CPU时间却只回收了少于2%(默认值)的堆空间。目的是为了让应用终止,给开发者机会去诊断问题。一般是应用程序在有限的内存上创建了大量的临时对象或者弱引用对象,从而导致该异常。虽然加大内存可以暂时解决这个问题,但是还是强烈建议去优化代码,后者更加有效。

怎么查看服务的jvm参数呢:
1. 打开cmd窗口输入命令:jvisualvm

然后我服务的启动参数:
 

cd D:\javajar\distList\java\2021.01.05.01   //jar包所在文件夹

start cmd /c "title pq  && java -Dfile.encoding=utf-8 -Dlog4j2.formatMsgNoLookups=true -server -Xms4096m -Xmx4096m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m  -jar pq-ykz-admin.jar --spring.profiles.active=prod --server.port=8033  "
                                                     
pause                   // 防止运行完毕后直接关闭界面

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

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

相关文章

supervisor--go版安装

系统环境 ubuntu18.04 安装 1、下载指定golang版本的安装包 安装包下载地址:https://github.com/ochinchina/supervisord/releases/tag/v0.7.3 1.1、构建supervisor的目录结构 mkdir -p /etc/supervisord/conf.d1.2、supervisor的目录结构 1.3、说明 目录中的…

【ELK 使用指南 3】Zookeeper、Kafka集群与Filebeat+Kafka+ELK架构(附部署实例)

EFLKK 一、Zookeeper1.1 简介1.2 zookeeper的作用1.3 Zookeeper的特点1.5 Zookeeper的数据结构1.6 Zookeeper的应用场景1.7 Zookeeper的选举机制(重要)1.7.1 第一次启动时1.7.2 非第一次启动时 二、Zookeeper集群部署2.1 安装前准备2.2 安装 ZookeeperSt…

Go语言入门心法(九): 引入三方依赖

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(八): mysql驱动安装报错onnection failed Go语言入门心法…

left join时筛选条件对查询结果的

-- 创建表 CREATE TABLE table1 (id int(11) NOT NULL AUTO_INCREMENT,card_num varchar(60) DEFAULT NULL,customer_id varchar(60) DEFAULT NULL,PRIMARY KEY (id) ) ENGINE InnoDBAUTO_INCREMENT 12DEFAULT CHARSET utf8mb4 COMMENT 测试表1;-- 创建表 CREAT…

在线课堂知识系统源码系统+前端+后端完整搭建教程

大家好啊,今天罗峰来给大家分享一款在线课堂知识系统源码系统。这款系统的功能十分强大。可以使用手机随时随地地学习,有专业的导师答疑解惑。支持视频,音频,图文章节。以下是部分核心代码图: 系统特色功能一览&#x…

Git reset current branche here操作请谨慎停留3秒

Idea git弹框请谨慎操作 下面几个选项要慎选 reset操作说明 soft,将版本回滚,工作区不动,暂存区原来的回滚后和回滚前的版本差异。 mixed,将版本回滚,回滚到了所有 git add 和 git commit 的命令执行之前。暂存区变…

《持续交付:发布可靠软件的系统方法》- 读书笔记(六)

持续交付:发布可靠软件的系统方法(六) 第 6 章 构建与部署的脚本化6.1 引言6.2 构建工具概览6.2.1 Make6.2.2 Ant6.2.3 NAnt 与 MSBuild6.2.4 Maven6.2.5 Rake6.2.6 Buildr6.2.7 Psake 6.3 构建部署脚本化的原则与实践6.3.1 为部署流水线的每…

为什么推荐使用SSL付费证书?

虽然免费的SSL证书提供了一种获取加密连接的途径,但它们与付费证书相比存在一些局限性和不足之处。免费的SSL证书在某些情况下可能不建议使用,主要有以下几个原因: 1. 可能信任度较低:免费SSL证书通常由非权威的证书颁发机构&…

国内有哪些支持定制化开发的低代码平台?

在国内,有许多支持定制化开发的低代码平台。这些平台通过简化和加速软件开发过程,使企业能够快速构建和定制应用程序,而无需大量编码工作。下面将详细介绍其中几个具有代表性的低代码平台。 1. Datainside: Datainside是一款强大…

查看linux系统 管道/栈/最大打开文件数等 命令 ulimit -a

不同平台下对默认栈大小修改_gcc设置堆栈大小-CSDN博客一、前言:在应用程序我们经常需要定义大的数组,数组定义成局部变量非静态变量,那么数组就会在栈上分配,当数组超过默认栈的大小时,会引起非常内存访问。一般&…

全网最全,Postman接口自动化测试实战整理,避开所有弯路...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 背景描述 项目要…

信钰证券:新增融券交易明显降温 业内称新规将平衡多类型投资者利益

10月14日,中国证监会发布调整优化融券相关准则的通知,沪深北买卖所齐发具体安排,阶段性收紧融券和战略出资者配售股份出借。其间,融券保证金比例进步自10月30日起实施,战略出资者配售股份出借收紧等其他条款自10月16日…

大模型的实践应用1-利用ChatGLM2大模型研发智能自助用药问答系统,远程监控患者的用药情况

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用1-利用ChatGLM2大模型研发智能自助用药问答系统,远程监控患者的用药情况。 随着人工智能技术的发展,我们的生活在许多方面都得到了改善。医疗领域也不例外。本文将介绍如何利用大模型(例如ChatGLM2-6b,文心一言,通义…

2023最新软件测试面试题解析

前言 时光荏苒,一转眼已踏入2023年,进入金九银十,人员就业市场以往的寒冬也貌似有了转暖的迹象,身边大批的就业人员也开始了紧张的备战之中。 近几周也和多家合作公司的HR进行了沟通,发现虽然岗位就业情况较去年有所…

Python数据分析实战-使用map方法根据字典中的映射关系替换某列的值(附源码和实现效果)

实现功能 使用map方法根据字典中的映射关系替换某列的值 实现代码 import pandas as pd# 创建一个示例DataFrame data {A: [1, 2, 3, 4, 5],B: [a, b, c, d, e]} df pd.DataFrame(data)# 打印映射替换前的DataFrame print("映射替换前的DataFrame:")…

windows中elasticsearch7中添加用户名密码验证

1.找到elsatic的bin目录输入cmd 2.生成ca证书 输入 elasticsearch-certutil ca 在es7根目录生成ca证书,输入密码时直接回车即可,否则后面会报错 Please enter the desired output file [elastic-stack-ca.p12]: #这里直接回车即可 Enter password for…

SAP-QM-采购过程模式与特性检验不匹配QD244

在创建物理样本,维护检验计划的采样过程时报错,从报错看,这个采样过程的评估模式和检验特性不匹配, 评估模式为700 700是根据特征上下线,计算平均值进行评估,是定量特性,经过测试 是检验特性的…

代码随想录第46天 | ● 583. 两个字符串的删除操作 ● 72. 编辑距离

583. 两个字符串的删除操作 /*** param {string} word1* param {string} word2* return {number}*/ var minDistance function(word1, word2) {const dp new Array(word1.length 1).fill(0).map(x > new Array(word2.length 1).fill(0));for (let i 0; i < word1.le…

软件外包开发测试文档

编写软件测试文档是确保软件质量和有效执行测试的关键步骤。以下是编写软件测试文档的一般步骤和建议&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 文档概述&#xff1a; 开始文档&#xff0c;提供…

ISR实现RDN图像增强

ISR实现RDN图像增强 图像增强作用ISR项目安装1.从PyPI安装ISR&#xff08;推荐&#xff09;&#xff1a;2.从GitHub源代码安装ISR&#xff1a; 用法预测大图像推理 训练创建模型 RDN算法介绍Residual Dense Network的结构残差稠密块&#xff08;Residual Dense Block&#xff0…