Tomcat报错—Tomcat内存溢出及大小调整

本文记录一些常见的Tomcat经常出现的内存溢出问题,在查询大量数据和加载jar包出现异常。

大家好,又见面了,我是全栈君。

本文记录一些常见的Tomcat经常出现的内存溢出问题,在查询大量数据和加载jar包出现异常。一般JVM内存溢出(OOM),分为堆内存溢出和PermGen区内存溢出:

1:java.lang.OutOfMemoryError: PermGen space(PermGen区内存溢出)

PermGen space(Permanent Generation space),是指内存的永久保存区域,

主要用于存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,

它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对其进行清理,

所以如果应用中有很多CLASS的话,就很可能出现PermGen space错误。如果加载的Class超过MaxPermSize,

就会抛出该异常,可以通过调整MaxPermSize进行解决。

这种错误常常出现在WEB服务器在对项目中的JSP进行pre—compile(预编译)的时候,

还有就是项目使用了很多的第三方的jar包,这个jar的大小超过了JVM默认的大小(4M),

也是会出现此错误的。


2:java.lang.OutOfMemoryError: Java heap space(堆溢出)

JVM堆是指java程序运行过程中JVM可以调配使用的内存空间。JVM在启动的时候会自动设置Heap size的值,

其初始空间(-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。

可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。

Heap size 的大小是Young Generation 和Tenured Generaion 之和。在JVM中如果98%的时间是用于GC且

可用的Heap size 不足2%的时候将抛出此异常信息。

提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,

而-Xmn为1/4的-Xmx值。

这两种方式的解决方法,在/bin/catalina.bat文件添加,根据自己的需求修改内存大小

加入JAVA_OPTS=”-server -XX:PermSize=64M -XX:MaxPermSize=128m

rem ----- Execute The Requested Command ---------------------------------------

JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m"

echo Using CATALINA_BASE:   "%CATALINA_BASE%"
echo Using CATALINA_HOME:   "%CATALINA_HOME%"
echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"

解释:

JAVA_OPTS=’-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】’

需要把这个两个参数值调大。例如:

JAVA_OPTS=’-Xms256m -Xmx512m’

表示初始化内存为256MB,可以使用的最大内存为512MB。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121273.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql锁表原因及如何处理_表被锁了还能查询

    mysql锁表原因及如何处理_表被锁了还能查询1、锁表发生在insert update、delete中  2、锁表的原理是数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite或者回滚或者退出数据库用户 3、锁表的原因  第一、A程序执行了对tableA的insert,并还未commite时,B程序也对tableA进行insert则此时会发生资源正忙的异常就是锁表 第二、锁表常…

    2022年8月23日
  • mac navicat 激活码【永久激活】

    (mac navicat 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
  • Layui弹出层关闭

    Layui弹出层关闭Layui弹窗关闭直接varindex=layer.open({…success:function(){layer.close(index);}})//获取当前窗口的namevarindex=parent.layer.getFrameIndex(window.name);//关闭窗口parent.layer.close(index);layer.closeAll();//疯狂模式,关闭所有层  layer..

    2022年6月5日
  • CountDownTimer使用心得及总结[通俗易懂]

    CountDownTimer使用心得及总结[通俗易懂]一、概述项目中经常用到倒计时的功能,比如说限时抢购,手机获取验证码等等。而google官方也帮我们封装好了一个类:CountDownTimer,使我们的开发更加方便;二、APICountDownTimer是一个抽象类,有两个抽象方法,它的API很简单publicabstractvoidonTick(longmillisUntilFinished);//这个是每次间隔指定时间的回调,mill…

    2022年9月18日
  • ajax发送异步请求四个步骤,深入理解ajax异步请求的五个步骤(详细代码)

    ajax发送异步请求四个步骤,深入理解ajax异步请求的五个步骤(详细代码)在前端工作中,经常会用到ajax,其实很多人只知道ajax是异步请求,不知道应该如何用它,它的基本步骤有哪些,ajax请求过程是怎样的?接下来这篇文章就给大家介绍Ajax的请求步骤,以及ajax请求步骤的详细代码。感兴趣的朋友可以看看。AJAX(AsynchronousJavaScriptandXML):是指一种创建交互式网页应用的网页开发技术,通过在后台与服务器进行少量数据交换,AJAX…

    2022年5月13日
  • JAVA中字符串常量池和缓冲池理解与作用「建议收藏」

    JAVA中字符串常量池和缓冲池理解与作用「建议收藏」字符串池与常量池是完全不同的两个东西,但是很多地方都喜欢把它们混为一谈,很容易让初学者产生误解,在这里我想好好讨论一下它们。字符串池也可以被称为字符串常量池,我认为这个名称就是产生误解的根源,有些人说着说着就把字符串三个字省略了,只剩下了常量池…所以为了避免误解,我建议在指代字符串对象的缓存池的时候,就直接称之为字符串池1常量池常量池分为两个类型,一是.class文件中静态的常量池,二是.class文件中的静态常量池被加载到JVM中而形成的运行时常量池。1.1静态常量池.cla

    2022年7月28日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号