linux java -xms_java.lang.OutOfMemoryError及解决方法

主要有3种比较常见的OutOfMemory Error:

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 :

export JAVA_OPTS="-Xms512m -Xmx2048m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=512m"

export CATALINA_OPTS="-Xms512m -Xmx2048m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=512m"

windows在{tomcat_dir}/bin/catalina.bat中找到如下几行:

set JAVA_OPTS=-server -Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

set CATALINA_OPTS=-server -Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m

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)那么就会产生此错误信息了。

解决办法:

linux在在{tomcat_dir}/bin/catalina.sh:

export JAVA_OPTS="-Xms512m -Xmx2048m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=512m"

export CATALINA_OPTS="-Xms512m -Xmx2048m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=512m"

windows在{tomcat_dir}/bin/catalina.bat中添加如下一行:

set JAVA_OPTS=-server -Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m

set CATALINA_OPTS=-server -Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m

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

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

4. CATALINA_OPTS和JAVA_OPTS区别

有两个环境变量 - CATALINA_OPTS和JAVA_OPTS- 都用于Tomcat 的catalina.sh启动和关闭脚本。它们在该文件中的注释中描述为:

[JAVA_OPTS] :(可选)执行“start”,“stop”或“run”命令时使用的Java运行时选项

[CATALINA_OPTS] :(可选)执行“start”或“run”命令时使用的Java运行时选项

那么为什么有两个不同的变量呢?有什么区别?

首先,在EITHER变量中指定的任何内容都以相同的方式传递给启动Tomcat的命令 - “start”或“run”命令 - 但只有在JAVA_OPTS中设置的值才会传递给“stop”命令。这可能对Tomcat在实践中的运行方式没有任何影响,因为它只影响运行的结束,而不是开始。

第二个区别更微妙。其他应用程序也可以使用JAVA_OPTS,但只有Tomcat才会使用CATALINA_OPTS。因此,如果您设置的环境变量仅供Tomcat使用,那么最好建议您使用CATALINA_OPTS,而如果您正在设置环境变量以供其他Java应用程序使用,例如JBoss,您应该放置您在JAVA_OPTS中的设置。

0b1331709591d260c1c78e86d0c51c18.png

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

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

相关文章

Excel模板导出之导出教材订购表

说明本教程主要说明如果使用Magicodes.IE.Excel完成教材订购表的Excel模板导出。要点本教程使用Magicodes.IE.Excel来完成Excel模板导出需要通过创建Dto来完成导出需要按要求准备Excel模板主要步骤1.安装包Magicodes.IE.Excel在本篇教程中,我们仅演示使用Excel来完成…

BeetleX网关非法Url请求拦截插件

一旦网站部署到互联网上,就会受到一些非法的请求,而这些请求的Url都是一些特定的路径或带上一些无关请求的字符用于探测一些服务存在的问题;还有这些请求会落到日志中,导致日志臃肿和转发到后台服务带来处理上的损耗。为了应对拦截…

java安装版本哪种好_我怎么知道我安装了哪个版本的Java?

问题描述我想开始玩java(最终到了可以为android或web编写基本小程序的地步),但是我已经在我的计算机上(从过去的实验中)弄糟了java。我不确定我拥有哪个版本的Java,并且想知道是否有命令查看已安装且处于活动状态的Java版本。另外,哪个版本效…

UnitTest in .NET 系列文章目录

Photo :.NET单元测试的艺术文 | Edison Zhou这几天陆陆续续更新了UnitTest in .NET这个系列的文章,现将其总结成一个小目录。此外,特别推荐阅读Roy Osherove的《单元测试的艺术》一书,此文也是该书的精华内容的学习笔记总结。文章…

java蝇量模式_Head First设计模式——蝇量和解释器模式

蝇量蝇量模式:如果让某个类的一个实例能用来提供许多“虚拟实例”,就使用蝇量模式。在一个设计房子的平台中,周围要加上一些树,树有一个坐标XY坐标位置,而且可以根据树的年龄动态将自己绘制出来。如果我们创建许多树之…

如何运用领域驱动设计 - 聚合

概述DDD实战与进阶 - 值对象如何运用DDD - 实体如何运用领域驱动设计 - 领域服务在前几篇的博文中,我们已经学习到了如何运用实体和值对象。随着我们所在领域的不断深入,领域模型变得逐渐清晰,我们已经建立了足够丰富的实体和值对象。但随着实…

C++菱形继承

菱形继承概念: 1.两个派生类继承同一个基类 2.又有某个类同时继承着两个派生类 这种继承被称为菱形继承,或者钻石继承 举个例子: 菱形继承问题: 1.羊继承了动物的数据,鸵同样继承了动物的数据,当羊驼使…

EntityFramework Core动态加载模型,我们要知道些什么呢?

这篇文章源于一位问我的童鞋:在EntityFramework Core中如何动态加载模型呢?在学习EntityFramwork时关于这个问题已有对应童鞋给出答案,故没有过多研究,虽然最后解决了这位童鞋提出的问题,但是当我再次深入研究时&#…

C++多态的基本语法与原理剖析

多态分为两类 1.静态多态:函数重载和运算符重载属于静态多态,复用函数名 2.动态多态:派生类和虚函数实现运行时多态 静态多态和动态多态区别: 1.静态多态的函数地址早绑定,编译阶段确定函数地址 2.多态多态的函数地址…

从零开始开发 VS Code 插件之 Translator Helper

本文目录Translator Helper 介绍开发概述创建第一个VS Code Extension需求分析操作文本调用Google Translation API实现核心功能配置命令插件配置测试插件打包插件发布插件CI/CDIcon及README小结Translator Helper 介绍 微软 Docs 网站上线之后,我发现很多中文内容是…

【实战 Ids4】║ 又一个项目迁移完成(MVC)

迎周一,腊月十九,小年倒计时新年还有两周时间就要到了,学习可不能停,这几天一直在加班调休,周末也如此,不过也是趁着半夜凌晨的时间,继续迁移我的项目到IdentityServer4统一认证授权中心Blog.Id…

C++string容器-赋值操作

功能描述&#xff1a; 给string字符串进行赋值 代码如下&#xff1a; #include <iostream> using namespace std; #include <cstring>void test01() {string str1;str1 "hello world";cout << "str1 " << str1 << endl;…

为什么说云原生会成为未来企业技术变迁的趋势

云原生是当下的热点话题&#xff0c;但是很多人对云原生有很多误解&#xff0c;特别是传统产业物联网或工控、物联网行业对云原生显得"后知后觉"。与其在这里说是预测&#xff0c;不如说是现在进行时&#xff0c;只是由于传统产业本身的技术包袱和组织个人认识程度差…

C++vector容器-构造函数

vector数据结构和数组非常相似&#xff0c;也称为单端数组&#xff0c;在数组的尾段可以做插入&#xff0c;删除操作 vector不同于普通数组&#xff0c;vector可以动态扩展 动态扩展&#xff1a;并不是在原空间之后续接新空间&#xff0c;而是找更大的内存空间&#xff0c;然…

BeetleX网关之请求聚合

在网关服务中请求聚合是允许把多个请求打包成一个响应给请求方&#xff0c;这样不仅可以节省请求方的请求数量&#xff0c;还可以根据需求的情况整合不同业务数据响应请求。BeetleX.Bumblebee虽然并没有内置这一功能&#xff0c;但可以通过扩展的形式来支持请求聚合&#xff0c…

C++vector容器-赋值操作

vector赋值操作 功能描述&#xff1a; 给vector容器进行赋值 函数原型&#xff1a; 代码如下&#xff1a; #include <iostream> using namespace std; #include <vector> //vector赋值操作void printVector(vector<int> &v) {for (vector<int >…

EntityFramework Core表名原理解析,让我来,揭开你神秘的面纱

上一节我们针对最开始抛出的异常只是进行了浅尝辄止的解析&#xff0c;是不是有点意犹未尽的感觉&#xff0c;是的&#xff0c;我也有这种感觉&#xff0c;看到这里相信您和我会有一些疑惑&#xff0c;要是我们接下来通过注解、Fluent APi、DbSet分别对表名进行如下设置&#x…

C++vector容器-容量和大小

vector容量和大小 功能描述&#xff1a; 对vector容器的容量和大小操作 函数原型&#xff1a; 代码如下&#xff1a; #include <iostream> using namespace std; #include <vector> //vector容器的容量和大小操作void printVector(vector<int > &v) {…

openresty+mysql+乱码_openresty记录响应body乱码问题

问题背景最近新上了一个功能&#xff0c;openresty通过syslog记录请求日志&#xff0c;然后由logstash推送至ES。测试上线时未发现这个问题&#xff0c;在日常查看日志的过程中&#xff0c;发现logstash推送有错误日志&#xff0c;错误内容为&#xff1a;Error parsing json&am…

【Azure学习.01】先从账号注册开始

本文部分内容配套视频&#xff1a;https://www.bilibili.com/video/av82898957马上要放假了&#xff0c;决定在家里简单了解一下Azure云服务&#xff0c;虽然公司其他部分用到了这个Azure&#xff0c;但是我还是没有接触到&#xff0c;只是听说很贵&#xff0c;好几千每天&…