使用ssh集成项目后,部署几次后会就会出现OutOfMemoryError PermGen space系统错误,通过在网上查阅资料,发现这个错误并不是Tomcat的问题,而JVM设计自身的一个缺陷,JVM把内存分了不同的区,PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,类加载的时候就存放在这个区域中。本来SUN设计的时候认为这个区域在JVM启动的时候就固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收!
老外一直认为这是sun JVM的一个bug,曾有这样的评价:“A bug this critical is open since 2003? Absolutely shameful”-- 我觉得SUN在这个BUG上确实有些丢脸。没想到至今这个问题还没未能解决,有人给出最好的解决方法是不使用JDK,使用BEA的JRokit,当然现在Oracle,BEA,SU已经成为一家人了,我想这个问题应该会更快有更好的解决方案。
好了还是说说如何解决问题吧,网上大量的资料说在tomcat这样设置:SETJAVA_OPTS=
-Xms64m
-Xmx512m,但经过本人的测试,没有一点作用,详细看了JVM内存的分配机制后才知道,-Xms和--Xmx是调整Java heap space(即堆内存)的大小,ava heap space区域中存放对象,GC会收集这块区域。
如果出现的异常类型是:OutOfMemoryError: Java heap space,那应该设置SETJAVA_OPTS= -Xms64m-Xmx512m。
如果出现的异常类型是:OutOfMemoryErrorPermGen space,那应该设置setJAVA_OPTS=-Xms128m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256m
常见的有两种设置方法:
如果在开发环境中启动tomcat,以eclipse为例:选择window->Preferences->MyEclipse-servers-Tomcat->JDK 在右侧框OptionalJava VM arguments中加入:-Xms128m -Xmx512m -XX:PermSize=128M -XX:PermSize=256M
如果独立启动tomcat,修改tomcat/bin/catalina.bat文件,查找set JAVA_OPTS,找到后把这一行修改为:
setJAVA_OPTS=-Xms128m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M,设置的时候要注意:-Xms+X:PermSize不能大于系统支持的最大JVM的大小。具体大小根据自己内存大小调整吧。
分享到:
相关推荐
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
Tomcat内存溢出解决方案 对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。(-Xms -Xmx -XX:PermSize -XX:MaxPermSize) 最后一种可能需要调整操作系统和tomcat jvm参数同时...
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
tomcat内存溢出总结 在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也不一样。 这里根据平时遇到的情况和相关资料进行一个总结。常见的一般会有下面三种情况: 1....
tomcat 出现 OutOfMemoryError 的解决方法
Java内存溢出解决办法 加大Tomcat使用Jvm内存(转载) 注重版权 Caused by: java lang OutOfMemoryError: Java heap space 错误原因及解决方法
TOMCAT出错:java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError,产生该错误的原因大都出于以下原因: JVM内存过小、程序不严密,产生了过多的垃圾.
ermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分 用于存放Class和...
关于Java中内存溢出的解决办法 关于Java中内存溢出的解决办法
maven构建时发生内存溢出的有很多种情况,比如eclipse-plugin,maven命令时,这里总结了分别怎么解决。
poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...
报错 java.lang.OutOfMemoryError: PermGen space 报错 java.lang.OutOfMemoryError: Java heap 启动报错java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler JAVA_OPTS="-server -Xms800m ...
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
1. java.lang.OutOfMemoryError: Java heap space 即JVM Heap溢出 解释说明:JVM在启动的时候会自动设置JVM Heap的值,JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。其初始空间默认是物理...
Java内存分析工具MAT(Memory Analyzer Tool) 可以解析内存的消耗,定位具体的类,定位问题
OutOfMemoryError-PermGen-space-的解决方案亲测有效
使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。 当服务器应用占用了过多内存的时候,会...
java.lang.OutOfMemoryError: PermGen space及其解决方法,解决项目太大tomcat内存溢出
在使用Java程序从数据库中查询大量的数据或是应用服务器(如tomcat、jboss,weblogic)加载jar包时会出现java.lang.OutOfMemoryError异常。这主要是由于应用服务器的内存不足引起的。